1 /* WinRT Windows.Management.Deployment.PackageManager Implementation
3 * Copyright (C) 2023 Mohamad Al-Jaf
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.
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.
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
21 #include "wine/debug.h"
23 WINE_DEFAULT_DEBUG_CHANNEL(appx
);
25 struct package_manager
27 IPackageManager IPackageManager_iface
;
28 IPackageManager2 IPackageManager2_iface
;
32 static inline struct package_manager
*impl_from_IPackageManager( IPackageManager
*iface
)
34 return CONTAINING_RECORD( iface
, struct package_manager
, IPackageManager_iface
);
37 static HRESULT WINAPI
package_manager_QueryInterface( IPackageManager
*iface
, REFIID iid
, void **out
)
39 struct package_manager
*impl
= impl_from_IPackageManager( iface
);
41 TRACE( "iface %p, iid %s, out %p.\n", iface
, debugstr_guid( iid
), out
);
43 if (IsEqualGUID( iid
, &IID_IUnknown
) ||
44 IsEqualGUID( iid
, &IID_IInspectable
) ||
45 IsEqualGUID( iid
, &IID_IAgileObject
) ||
46 IsEqualGUID( iid
, &IID_IPackageManager
))
48 *out
= &impl
->IPackageManager_iface
;
49 IInspectable_AddRef( *out
);
53 if (IsEqualGUID( iid
, &IID_IPackageManager2
))
55 *out
= &impl
->IPackageManager2_iface
;
56 IInspectable_AddRef( *out
);
60 FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid
) );
65 static ULONG WINAPI
package_manager_AddRef( IPackageManager
*iface
)
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
);
73 static ULONG WINAPI
package_manager_Release( IPackageManager
*iface
)
75 struct package_manager
*impl
= impl_from_IPackageManager( iface
);
76 ULONG ref
= InterlockedDecrement( &impl
->ref
);
78 TRACE( "iface %p decreasing refcount to %lu.\n", iface
, ref
);
80 if (!ref
) free( impl
);
84 static HRESULT WINAPI
package_manager_GetIids( IPackageManager
*iface
, ULONG
*iid_count
, IID
**iids
)
86 FIXME( "iface %p, iid_count %p, iids %p stub!\n", iface
, iid_count
, iids
);
90 static HRESULT WINAPI
package_manager_GetRuntimeClassName( IPackageManager
*iface
, HSTRING
*class_name
)
92 FIXME( "iface %p, class_name %p stub!\n", iface
, class_name
);
96 static HRESULT WINAPI
package_manager_GetTrustLevel( IPackageManager
*iface
, TrustLevel
*trust_level
)
98 FIXME( "iface %p, trust_level %p stub!\n", iface
, trust_level
);
102 static HRESULT WINAPI
package_manager_AddPackageAsync( IPackageManager
*iface
, IUriRuntimeClass
*uri
,
103 IIterable_Uri
*dependencies
, DeploymentOptions options
, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
105 FIXME( "iface %p, uri %p, dependencies %p, options %d, operation %p stub!\n", iface
, uri
, dependencies
, options
, operation
);
109 static HRESULT WINAPI
package_manager_UpdatePackageAsync( IPackageManager
*iface
, IUriRuntimeClass
*uri
, IIterable_Uri
*dependencies
,
110 DeploymentOptions options
, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
112 FIXME( "iface %p, uri %p, dependencies %p, options %d, operation %p stub!\n", iface
, uri
, dependencies
, options
, operation
);
116 static HRESULT WINAPI
package_manager_RemovePackageAsync( IPackageManager
*iface
, HSTRING name
,
117 IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
119 FIXME( "iface %p, name %s, operation %p stub!\n", iface
, debugstr_hstring(name
), operation
);
123 static HRESULT WINAPI
package_manager_StagePackageAsync( IPackageManager
*iface
, IUriRuntimeClass
*uri
, IIterable_Uri
*dependencies
,
124 IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
126 FIXME( "iface %p, uri %p, dependencies %p, operation %p stub!\n", iface
, uri
, dependencies
, operation
);
130 static HRESULT WINAPI
package_manager_RegisterPackageAsync( IPackageManager
*iface
, IUriRuntimeClass
*uri
, IIterable_Uri
*dependencies
,
131 DeploymentOptions options
, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
133 FIXME( "iface %p, uri %p, dependencies %p, options %d, operation %p stub!\n", iface
, uri
, dependencies
, options
, operation
);
137 static HRESULT WINAPI
package_manager_FindPackages( IPackageManager
*iface
, IIterable_Package
**packages
)
139 FIXME( "iface %p, packages %p stub!\n", iface
, packages
);
143 static HRESULT WINAPI
package_manager_FindPackagesByUserSecurityId( IPackageManager
*iface
, HSTRING sid
, IIterable_Package
**packages
)
145 FIXME( "iface %p, sid %s, packages %p stub!\n", iface
, debugstr_hstring(sid
), packages
);
149 static HRESULT WINAPI
package_manager_FindPackagesByNamePublisher( IPackageManager
*iface
, HSTRING name
, HSTRING publisher
, IIterable_Package
**packages
)
151 FIXME( "iface %p, name %s, publisher %s, packages %p stub!\n", iface
, debugstr_hstring(name
), debugstr_hstring(publisher
), packages
);
153 if (!name
|| !publisher
) return E_INVALIDARG
;
157 static HRESULT WINAPI
package_manager_FindPackagesByUserSecurityIdNamePublisher( IPackageManager
*iface
, HSTRING sid
,
158 HSTRING name
, HSTRING publisher
, IIterable_Package
**packages
)
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
);
164 static HRESULT WINAPI
package_manager_FindUsers( IPackageManager
*iface
, HSTRING name
, IIterable_PackageUserInformation
**users
)
166 FIXME( "iface %p, name %s, users %p stub!\n", iface
, debugstr_hstring(name
), users
);
170 static HRESULT WINAPI
package_manager_SetPackageState( IPackageManager
*iface
, HSTRING name
, PackageState state
)
172 FIXME("iface %p, name %s, state %d stub!\n", iface
, debugstr_hstring(name
), state
);
176 static HRESULT WINAPI
package_manager_FindPackageByPackageFullName( IPackageManager
*iface
, HSTRING name
, IPackage
**package
)
178 FIXME( "iface %p, name %s, package %p stub!\n", iface
, debugstr_hstring(name
), package
);
182 static HRESULT WINAPI
package_manager_CleanupPackageForUserAsync( IPackageManager
*iface
, HSTRING name
, HSTRING sid
,
183 IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
185 FIXME( "iface %p, name %s, sid %s, operation %p stub!\n", iface
, debugstr_hstring(name
), debugstr_hstring(sid
), operation
);
189 static HRESULT WINAPI
package_manager_FindPackagesByPackageFamilyName( IPackageManager
*iface
, HSTRING family_name
,
190 IIterable_Package
**packages
)
192 FIXME( "iface %p, family_name %s, packages %p stub!\n", iface
, debugstr_hstring(family_name
), packages
);
196 static HRESULT WINAPI
package_manager_FindPackagesByUserSecurityIdPackageFamilyName( IPackageManager
*iface
, HSTRING sid
,
197 HSTRING family_name
, IIterable_Package
**packages
)
199 FIXME( "iface %p, sid %s, family_name %s, packages %p stub!\n", iface
, debugstr_hstring(sid
), debugstr_hstring(family_name
), packages
);
203 static HRESULT WINAPI
package_manager_FindPackageByUserSecurityIdPackageFullName( IPackageManager
*iface
, HSTRING sid
, HSTRING name
, IPackage
**package
)
205 FIXME( "iface %p, sid %s, name %s, package %p stub!\n", iface
, debugstr_hstring(sid
), debugstr_hstring(name
), package
);
209 static const struct IPackageManagerVtbl package_manager_vtbl
=
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
237 DEFINE_IINSPECTABLE( package_manager2
, IPackageManager2
, struct package_manager
, IPackageManager_iface
);
239 static HRESULT WINAPI
package_manager2_RemovePackageWithOptionsAsync( IPackageManager2
*iface
, HSTRING name
, RemovalOptions options
,
240 IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
242 FIXME( "iface %p, name %s, options %d, operation %p stub!\n", iface
, debugstr_hstring(name
), options
, operation
);
246 static HRESULT WINAPI
package_manager2_StagePackageWithOptionsAsync( IPackageManager2
*iface
, IUriRuntimeClass
*uri
, IIterable_Uri
*dependencies
,
247 DeploymentOptions options
, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
249 FIXME( "iface %p, uri %p, dependencies %p, options %d, operation %p stub!\n", iface
, uri
, dependencies
, options
, operation
);
253 static HRESULT WINAPI
package_manager2_RegisterPackageByFullNameAsync( IPackageManager2
*iface
, HSTRING name
, IIterable_HSTRING
*dependencies
,
254 DeploymentOptions options
, IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
256 FIXME( "iface %p, name %s, dependencies %p, options %d, operation %p stub!\n", iface
, debugstr_hstring(name
), dependencies
, options
, operation
);
260 static HRESULT WINAPI
package_manager2_FindPackagesWithPackageTypes( IPackageManager2
*iface
, PackageTypes types
, IIterable_Package
**packages
)
262 FIXME( "iface %p, types %d, packages %p stub!\n", iface
, types
, packages
);
266 static HRESULT WINAPI
package_manager2_FindPackagesByUserSecurityIdWithPackageTypes( IPackageManager2
*iface
, HSTRING sid
,
267 PackageTypes types
, IIterable_Package
**packages
)
269 FIXME( "iface %p, sid %s, types %d, packages %p stub!\n", iface
, debugstr_hstring(sid
), types
, packages
);
273 static HRESULT WINAPI
package_manager2_FindPackagesByNamePublisherWithPackageTypes( IPackageManager2
*iface
, HSTRING name
, HSTRING publisher
,
274 PackageTypes types
, IIterable_Package
**packages
)
276 FIXME( "iface %p, name %s, publisher %s, types %d, packages %p stub!\n", iface
, debugstr_hstring(name
), debugstr_hstring(publisher
), types
, packages
);
280 static HRESULT WINAPI
package_manager2_FindPackagesByUserSecurityIdNamePublisherWithPackageTypes( IPackageManager2
*iface
, HSTRING sid
, HSTRING name
,
281 HSTRING publisher
, PackageTypes types
, IIterable_Package
**packages
)
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
);
287 static HRESULT WINAPI
package_manager2_FindPackagesByPackageFamilyNameWithPackageTypes( IPackageManager2
*iface
, HSTRING family_name
, PackageTypes types
,
288 IIterable_Package
**packages
)
290 FIXME( "iface %p, family_name %s, types %d, packages %p stub!\n", iface
, debugstr_hstring(family_name
), types
, packages
);
294 static HRESULT WINAPI
package_manager2_FindPackagesByUserSecurityIdPackageFamilyNameWithPackageTypes( IPackageManager2
*iface
, HSTRING sid
, HSTRING family_name
,
295 PackageTypes types
, IIterable_Package
**packages
)
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
);
301 static HRESULT WINAPI
package_manager2_StageUserDataAsync( IPackageManager2
*iface
, HSTRING name
,
302 IAsyncOperationWithProgress_DeploymentResult_DeploymentProgress
**operation
)
304 FIXME( "iface %p, name %s, operation %p stub!\n", iface
, debugstr_hstring(name
), operation
);
308 static const struct IPackageManager2Vtbl package_manager2_vtbl
=
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
,
330 struct package_manager_statics
332 IActivationFactory IActivationFactory_iface
;
336 static inline struct package_manager_statics
*impl_from_IActivationFactory( IActivationFactory
*iface
)
338 return CONTAINING_RECORD( iface
, struct package_manager_statics
, IActivationFactory_iface
);
341 static HRESULT WINAPI
factory_QueryInterface( IActivationFactory
*iface
, REFIID iid
, void **out
)
343 struct package_manager_statics
*impl
= impl_from_IActivationFactory( iface
);
345 TRACE( "iface %p, iid %s, out %p.\n", iface
, debugstr_guid( iid
), out
);
347 if (IsEqualGUID( iid
, &IID_IUnknown
) ||
348 IsEqualGUID( iid
, &IID_IInspectable
) ||
349 IsEqualGUID( iid
, &IID_IActivationFactory
))
351 *out
= &impl
->IActivationFactory_iface
;
352 IInspectable_AddRef( *out
);
356 FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid
) );
358 return E_NOINTERFACE
;
361 static ULONG WINAPI
factory_AddRef( IActivationFactory
*iface
)
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
);
369 static ULONG WINAPI
factory_Release( IActivationFactory
*iface
)
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
);
377 static HRESULT WINAPI
factory_GetIids( IActivationFactory
*iface
, ULONG
*iid_count
, IID
**iids
)
379 FIXME( "iface %p, iid_count %p, iids %p stub!\n", iface
, iid_count
, iids
);
383 static HRESULT WINAPI
factory_GetRuntimeClassName( IActivationFactory
*iface
, HSTRING
*class_name
)
385 FIXME( "iface %p, class_name %p stub!\n", iface
, class_name
);
389 static HRESULT WINAPI
factory_GetTrustLevel( IActivationFactory
*iface
, TrustLevel
*trust_level
)
391 FIXME( "iface %p, trust_level %p stub!\n", iface
, trust_level
);
395 static HRESULT WINAPI
factory_ActivateInstance( IActivationFactory
*iface
, IInspectable
**instance
)
397 struct package_manager
*impl
;
399 TRACE( "iface %p, instance %p.\n", iface
, instance
);
401 if (!(impl
= calloc( 1, sizeof(*impl
) )))
404 return E_OUTOFMEMORY
;
407 impl
->IPackageManager_iface
.lpVtbl
= &package_manager_vtbl
;
408 impl
->IPackageManager2_iface
.lpVtbl
= &package_manager2_vtbl
;
411 *instance
= (IInspectable
*)&impl
->IPackageManager_iface
;
415 static const struct IActivationFactoryVtbl factory_vtbl
=
417 factory_QueryInterface
,
420 /* IInspectable methods */
422 factory_GetRuntimeClassName
,
423 factory_GetTrustLevel
,
424 /* IActivationFactory methods */
425 factory_ActivateInstance
,
428 static struct package_manager_statics package_manager_statics
=
434 IActivationFactory
*package_manager_factory
= &package_manager_statics
.IActivationFactory_iface
;