Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/dlls/appxdeploymentclient/package.c
4389 views
1
/* WinRT Windows.Management.Deployment.PackageManager Implementation
2
*
3
* Copyright (C) 2023 Mohamad Al-Jaf
4
*
5
* This library is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU Lesser General Public
7
* License as published by the Free Software Foundation; either
8
* version 2.1 of the License, or (at your option) any later version.
9
*
10
* This library is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
* Lesser General Public License for more details.
14
*
15
* You should have received a copy of the GNU Lesser General Public
16
* License along with this library; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18
*/
19
20
#include "private.h"
21
#include "wine/debug.h"
22
23
WINE_DEFAULT_DEBUG_CHANNEL(appx);
24
25
struct package_manager
26
{
27
IPackageManager IPackageManager_iface;
28
IPackageManager2 IPackageManager2_iface;
29
LONG ref;
30
};
31
32
static inline struct package_manager *impl_from_IPackageManager( IPackageManager *iface )
33
{
34
return CONTAINING_RECORD( iface, struct package_manager, IPackageManager_iface );
35
}
36
37
static HRESULT WINAPI package_manager_QueryInterface( IPackageManager *iface, REFIID iid, void **out )
38
{
39
struct package_manager *impl = impl_from_IPackageManager( iface );
40
41
TRACE( "iface %p, iid %s, out %p.\n", iface, debugstr_guid( iid ), out );
42
43
if (IsEqualGUID( iid, &IID_IUnknown ) ||
44
IsEqualGUID( iid, &IID_IInspectable ) ||
45
IsEqualGUID( iid, &IID_IAgileObject ) ||
46
IsEqualGUID( iid, &IID_IPackageManager ))
47
{
48
*out = &impl->IPackageManager_iface;
49
IInspectable_AddRef( *out );
50
return S_OK;
51
}
52
53
if (IsEqualGUID( iid, &IID_IPackageManager2 ))
54
{
55
*out = &impl->IPackageManager2_iface;
56
IInspectable_AddRef( *out );
57
return S_OK;
58
}
59
60
FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid ) );
61
*out = NULL;
62
return E_NOINTERFACE;
63
}
64
65
static ULONG WINAPI package_manager_AddRef( IPackageManager *iface )
66
{
67
struct package_manager *impl = impl_from_IPackageManager( iface );
68
ULONG ref = InterlockedIncrement( &impl->ref );
69
TRACE( "iface %p increasing refcount to %lu.\n", iface, ref );
70
return ref;
71
}
72
73
static ULONG WINAPI package_manager_Release( IPackageManager *iface )
74
{
75
struct package_manager *impl = impl_from_IPackageManager( iface );
76
ULONG ref = InterlockedDecrement( &impl->ref );
77
78
TRACE( "iface %p decreasing refcount to %lu.\n", iface, ref );
79
80
if (!ref) free( impl );
81
return ref;
82
}
83
84
static HRESULT WINAPI package_manager_GetIids( IPackageManager *iface, ULONG *iid_count, IID **iids )
85
{
86
FIXME( "iface %p, iid_count %p, iids %p stub!\n", iface, iid_count, iids );
87
return E_NOTIMPL;
88
}
89
90
static HRESULT WINAPI package_manager_GetRuntimeClassName( IPackageManager *iface, HSTRING *class_name )
91
{
92
FIXME( "iface %p, class_name %p stub!\n", iface, class_name );
93
return E_NOTIMPL;
94
}
95
96
static HRESULT WINAPI package_manager_GetTrustLevel( IPackageManager *iface, TrustLevel *trust_level )
97
{
98
FIXME( "iface %p, trust_level %p stub!\n", iface, trust_level );
99
return E_NOTIMPL;
100
}
101
102
static HRESULT WINAPI package_manager_AddPackageAsync( IPackageManager *iface, IUriRuntimeClass *uri,
103
IIterable_Uri *dependencies, DeploymentOptions options, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
104
{
105
FIXME( "iface %p, uri %p, dependencies %p, options %d, operation %p stub!\n", iface, uri, dependencies, options, operation );
106
return E_NOTIMPL;
107
}
108
109
static HRESULT WINAPI package_manager_UpdatePackageAsync( IPackageManager *iface, IUriRuntimeClass *uri, IIterable_Uri *dependencies,
110
DeploymentOptions options, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
111
{
112
FIXME( "iface %p, uri %p, dependencies %p, options %d, operation %p stub!\n", iface, uri, dependencies, options, operation );
113
return E_NOTIMPL;
114
}
115
116
static HRESULT WINAPI package_manager_RemovePackageAsync( IPackageManager *iface, HSTRING name,
117
IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
118
{
119
FIXME( "iface %p, name %s, operation %p stub!\n", iface, debugstr_hstring(name), operation );
120
return E_NOTIMPL;
121
}
122
123
static HRESULT WINAPI package_manager_StagePackageAsync( IPackageManager *iface, IUriRuntimeClass *uri, IIterable_Uri *dependencies,
124
IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
125
{
126
FIXME( "iface %p, uri %p, dependencies %p, operation %p stub!\n", iface, uri, dependencies, operation );
127
return E_NOTIMPL;
128
}
129
130
static HRESULT WINAPI package_manager_RegisterPackageAsync( IPackageManager *iface, IUriRuntimeClass *uri, IIterable_Uri *dependencies,
131
DeploymentOptions options, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
132
{
133
FIXME( "iface %p, uri %p, dependencies %p, options %d, operation %p stub!\n", iface, uri, dependencies, options, operation );
134
return E_NOTIMPL;
135
}
136
137
static HRESULT WINAPI package_manager_FindPackages( IPackageManager *iface, IIterable_Package **packages )
138
{
139
FIXME( "iface %p, packages %p stub!\n", iface, packages );
140
return E_NOTIMPL;
141
}
142
143
static HRESULT WINAPI package_manager_FindPackagesByUserSecurityId( IPackageManager *iface, HSTRING sid, IIterable_Package **packages )
144
{
145
FIXME( "iface %p, sid %s, packages %p stub!\n", iface, debugstr_hstring(sid), packages );
146
return E_NOTIMPL;
147
}
148
149
static HRESULT WINAPI package_manager_FindPackagesByNamePublisher( IPackageManager *iface, HSTRING name, HSTRING publisher, IIterable_Package **packages )
150
{
151
FIXME( "iface %p, name %s, publisher %s, packages %p stub!\n", iface, debugstr_hstring(name), debugstr_hstring(publisher), packages );
152
153
if (!name || !publisher) return E_INVALIDARG;
154
return E_NOTIMPL;
155
}
156
157
static HRESULT WINAPI package_manager_FindPackagesByUserSecurityIdNamePublisher( IPackageManager *iface, HSTRING sid,
158
HSTRING name, HSTRING publisher, IIterable_Package **packages )
159
{
160
FIXME( "iface %p, sid %s, name %s, publisher %s, packages %p stub!\n", iface, debugstr_hstring(sid), debugstr_hstring(name), debugstr_hstring(publisher), packages );
161
return E_NOTIMPL;
162
}
163
164
static HRESULT WINAPI package_manager_FindUsers( IPackageManager *iface, HSTRING name, IIterable_PackageUserInformation **users )
165
{
166
FIXME( "iface %p, name %s, users %p stub!\n", iface, debugstr_hstring(name), users );
167
return E_NOTIMPL;
168
}
169
170
static HRESULT WINAPI package_manager_SetPackageState( IPackageManager *iface, HSTRING name, PackageState state )
171
{
172
FIXME("iface %p, name %s, state %d stub!\n", iface, debugstr_hstring(name), state);
173
return E_NOTIMPL;
174
}
175
176
static HRESULT WINAPI package_manager_FindPackageByPackageFullName( IPackageManager *iface, HSTRING name, IPackage **package )
177
{
178
FIXME( "iface %p, name %s, package %p stub!\n", iface, debugstr_hstring(name), package );
179
return E_NOTIMPL;
180
}
181
182
static HRESULT WINAPI package_manager_CleanupPackageForUserAsync( IPackageManager *iface, HSTRING name, HSTRING sid,
183
IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
184
{
185
FIXME( "iface %p, name %s, sid %s, operation %p stub!\n", iface, debugstr_hstring(name), debugstr_hstring(sid), operation );
186
return E_NOTIMPL;
187
}
188
189
static HRESULT WINAPI package_manager_FindPackagesByPackageFamilyName( IPackageManager *iface, HSTRING family_name,
190
IIterable_Package **packages )
191
{
192
FIXME( "iface %p, family_name %s, packages %p stub!\n", iface, debugstr_hstring(family_name), packages );
193
return E_NOTIMPL;
194
}
195
196
static HRESULT WINAPI package_manager_FindPackagesByUserSecurityIdPackageFamilyName( IPackageManager *iface, HSTRING sid,
197
HSTRING family_name, IIterable_Package **packages )
198
{
199
FIXME( "iface %p, sid %s, family_name %s, packages %p stub!\n", iface, debugstr_hstring(sid), debugstr_hstring(family_name), packages );
200
return E_NOTIMPL;
201
}
202
203
static HRESULT WINAPI package_manager_FindPackageByUserSecurityIdPackageFullName( IPackageManager *iface, HSTRING sid, HSTRING name, IPackage **package )
204
{
205
FIXME( "iface %p, sid %s, name %s, package %p stub!\n", iface, debugstr_hstring(sid), debugstr_hstring(name), package );
206
return E_NOTIMPL;
207
}
208
209
static const struct IPackageManagerVtbl package_manager_vtbl =
210
{
211
package_manager_QueryInterface,
212
package_manager_AddRef,
213
package_manager_Release,
214
/* IInspectable methods */
215
package_manager_GetIids,
216
package_manager_GetRuntimeClassName,
217
package_manager_GetTrustLevel,
218
/* IPackageManager methods */
219
package_manager_AddPackageAsync,
220
package_manager_UpdatePackageAsync,
221
package_manager_RemovePackageAsync,
222
package_manager_StagePackageAsync,
223
package_manager_RegisterPackageAsync,
224
package_manager_FindPackages,
225
package_manager_FindPackagesByUserSecurityId,
226
package_manager_FindPackagesByNamePublisher,
227
package_manager_FindPackagesByUserSecurityIdNamePublisher,
228
package_manager_FindUsers,
229
package_manager_SetPackageState,
230
package_manager_FindPackageByPackageFullName,
231
package_manager_CleanupPackageForUserAsync,
232
package_manager_FindPackagesByPackageFamilyName,
233
package_manager_FindPackagesByUserSecurityIdPackageFamilyName,
234
package_manager_FindPackageByUserSecurityIdPackageFullName
235
};
236
237
DEFINE_IINSPECTABLE( package_manager2, IPackageManager2, struct package_manager, IPackageManager_iface );
238
239
static HRESULT WINAPI package_manager2_RemovePackageWithOptionsAsync( IPackageManager2 *iface, HSTRING name, RemovalOptions options,
240
IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
241
{
242
FIXME( "iface %p, name %s, options %d, operation %p stub!\n", iface, debugstr_hstring(name), options, operation );
243
return E_NOTIMPL;
244
}
245
246
static HRESULT WINAPI package_manager2_StagePackageWithOptionsAsync( IPackageManager2 *iface, IUriRuntimeClass *uri, IIterable_Uri *dependencies,
247
DeploymentOptions options, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
248
{
249
FIXME( "iface %p, uri %p, dependencies %p, options %d, operation %p stub!\n", iface, uri, dependencies, options, operation );
250
return E_NOTIMPL;
251
}
252
253
static HRESULT WINAPI package_manager2_RegisterPackageByFullNameAsync( IPackageManager2 *iface, HSTRING name, IIterable_HSTRING *dependencies,
254
DeploymentOptions options, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
255
{
256
FIXME( "iface %p, name %s, dependencies %p, options %d, operation %p stub!\n", iface, debugstr_hstring(name), dependencies, options, operation );
257
return E_NOTIMPL;
258
}
259
260
static HRESULT WINAPI package_manager2_FindPackagesWithPackageTypes( IPackageManager2 *iface, PackageTypes types, IIterable_Package **packages )
261
{
262
FIXME( "iface %p, types %d, packages %p stub!\n", iface, types, packages );
263
return E_NOTIMPL;
264
}
265
266
static HRESULT WINAPI package_manager2_FindPackagesByUserSecurityIdWithPackageTypes( IPackageManager2 *iface, HSTRING sid,
267
PackageTypes types, IIterable_Package **packages )
268
{
269
FIXME( "iface %p, sid %s, types %d, packages %p stub!\n", iface, debugstr_hstring(sid), types, packages );
270
return E_NOTIMPL;
271
}
272
273
static HRESULT WINAPI package_manager2_FindPackagesByNamePublisherWithPackageTypes( IPackageManager2 *iface, HSTRING name, HSTRING publisher,
274
PackageTypes types, IIterable_Package **packages )
275
{
276
FIXME( "iface %p, name %s, publisher %s, types %d, packages %p stub!\n", iface, debugstr_hstring(name), debugstr_hstring(publisher), types, packages );
277
return E_NOTIMPL;
278
}
279
280
static HRESULT WINAPI package_manager2_FindPackagesByUserSecurityIdNamePublisherWithPackageTypes( IPackageManager2 *iface, HSTRING sid, HSTRING name,
281
HSTRING publisher, PackageTypes types, IIterable_Package **packages )
282
{
283
FIXME( "iface %p, sid %s, name %s, publisher %s, types %d, packages %p stub!\n", iface, debugstr_hstring(sid), debugstr_hstring(name), debugstr_hstring(publisher), types, packages );
284
return E_NOTIMPL;
285
}
286
287
static HRESULT WINAPI package_manager2_FindPackagesByPackageFamilyNameWithPackageTypes( IPackageManager2 *iface, HSTRING family_name, PackageTypes types,
288
IIterable_Package **packages )
289
{
290
FIXME( "iface %p, family_name %s, types %d, packages %p stub!\n", iface, debugstr_hstring(family_name), types, packages );
291
return E_NOTIMPL;
292
}
293
294
static HRESULT WINAPI package_manager2_FindPackagesByUserSecurityIdPackageFamilyNameWithPackageTypes( IPackageManager2 *iface, HSTRING sid, HSTRING family_name,
295
PackageTypes types, IIterable_Package **packages )
296
{
297
FIXME( "iface %p, sid %s, family_name %s, types %d, packages %p stub!\n", iface, debugstr_hstring(sid), debugstr_hstring(family_name), types, packages );
298
return E_NOTIMPL;
299
}
300
301
static HRESULT WINAPI package_manager2_StageUserDataAsync( IPackageManager2 *iface, HSTRING name,
302
IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress **operation )
303
{
304
FIXME( "iface %p, name %s, operation %p stub!\n", iface, debugstr_hstring(name), operation );
305
return E_NOTIMPL;
306
}
307
308
static const struct IPackageManager2Vtbl package_manager2_vtbl =
309
{
310
package_manager2_QueryInterface,
311
package_manager2_AddRef,
312
package_manager2_Release,
313
/* IInspectable methods */
314
package_manager2_GetIids,
315
package_manager2_GetRuntimeClassName,
316
package_manager2_GetTrustLevel,
317
/* IPackageManager2 methods */
318
package_manager2_RemovePackageWithOptionsAsync,
319
package_manager2_StagePackageWithOptionsAsync,
320
package_manager2_RegisterPackageByFullNameAsync,
321
package_manager2_FindPackagesWithPackageTypes,
322
package_manager2_FindPackagesByUserSecurityIdWithPackageTypes,
323
package_manager2_FindPackagesByNamePublisherWithPackageTypes,
324
package_manager2_FindPackagesByUserSecurityIdNamePublisherWithPackageTypes,
325
package_manager2_FindPackagesByPackageFamilyNameWithPackageTypes,
326
package_manager2_FindPackagesByUserSecurityIdPackageFamilyNameWithPackageTypes,
327
package_manager2_StageUserDataAsync,
328
};
329
330
struct package_manager_statics
331
{
332
IActivationFactory IActivationFactory_iface;
333
LONG ref;
334
};
335
336
static inline struct package_manager_statics *impl_from_IActivationFactory( IActivationFactory *iface )
337
{
338
return CONTAINING_RECORD( iface, struct package_manager_statics, IActivationFactory_iface );
339
}
340
341
static HRESULT WINAPI factory_QueryInterface( IActivationFactory *iface, REFIID iid, void **out )
342
{
343
struct package_manager_statics *impl = impl_from_IActivationFactory( iface );
344
345
TRACE( "iface %p, iid %s, out %p.\n", iface, debugstr_guid( iid ), out );
346
347
if (IsEqualGUID( iid, &IID_IUnknown ) ||
348
IsEqualGUID( iid, &IID_IInspectable ) ||
349
IsEqualGUID( iid, &IID_IActivationFactory ))
350
{
351
*out = &impl->IActivationFactory_iface;
352
IInspectable_AddRef( *out );
353
return S_OK;
354
}
355
356
FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid ) );
357
*out = NULL;
358
return E_NOINTERFACE;
359
}
360
361
static ULONG WINAPI factory_AddRef( IActivationFactory *iface )
362
{
363
struct package_manager_statics *impl = impl_from_IActivationFactory( iface );
364
ULONG ref = InterlockedIncrement( &impl->ref );
365
TRACE( "iface %p increasing refcount to %lu.\n", iface, ref );
366
return ref;
367
}
368
369
static ULONG WINAPI factory_Release( IActivationFactory *iface )
370
{
371
struct package_manager_statics *impl = impl_from_IActivationFactory( iface );
372
ULONG ref = InterlockedDecrement( &impl->ref );
373
TRACE( "iface %p decreasing refcount to %lu.\n", iface, ref );
374
return ref;
375
}
376
377
static HRESULT WINAPI factory_GetIids( IActivationFactory *iface, ULONG *iid_count, IID **iids )
378
{
379
FIXME( "iface %p, iid_count %p, iids %p stub!\n", iface, iid_count, iids );
380
return E_NOTIMPL;
381
}
382
383
static HRESULT WINAPI factory_GetRuntimeClassName( IActivationFactory *iface, HSTRING *class_name )
384
{
385
FIXME( "iface %p, class_name %p stub!\n", iface, class_name );
386
return E_NOTIMPL;
387
}
388
389
static HRESULT WINAPI factory_GetTrustLevel( IActivationFactory *iface, TrustLevel *trust_level )
390
{
391
FIXME( "iface %p, trust_level %p stub!\n", iface, trust_level );
392
return E_NOTIMPL;
393
}
394
395
static HRESULT WINAPI factory_ActivateInstance( IActivationFactory *iface, IInspectable **instance )
396
{
397
struct package_manager *impl;
398
399
TRACE( "iface %p, instance %p.\n", iface, instance );
400
401
if (!(impl = calloc( 1, sizeof(*impl) )))
402
{
403
*instance = NULL;
404
return E_OUTOFMEMORY;
405
}
406
407
impl->IPackageManager_iface.lpVtbl = &package_manager_vtbl;
408
impl->IPackageManager2_iface.lpVtbl = &package_manager2_vtbl;
409
impl->ref = 1;
410
411
*instance = (IInspectable *)&impl->IPackageManager_iface;
412
return S_OK;
413
}
414
415
static const struct IActivationFactoryVtbl factory_vtbl =
416
{
417
factory_QueryInterface,
418
factory_AddRef,
419
factory_Release,
420
/* IInspectable methods */
421
factory_GetIids,
422
factory_GetRuntimeClassName,
423
factory_GetTrustLevel,
424
/* IActivationFactory methods */
425
factory_ActivateInstance,
426
};
427
428
static struct package_manager_statics package_manager_statics =
429
{
430
{&factory_vtbl},
431
1,
432
};
433
434
IActivationFactory *package_manager_factory = &package_manager_statics.IActivationFactory_iface;
435
436