include: Use proper dllimports for propsys functions.
[wine.git] / dlls / appxdeploymentclient / package.c
blob50dcb0f928afa6cdd215bf16bb2913e4a8cb3e5d
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
20 #include "private.h"
21 #include "wine/debug.h"
23 WINE_DEFAULT_DEBUG_CHANNEL(appx);
25 struct package_manager
27 IPackageManager IPackageManager_iface;
28 IPackageManager2 IPackageManager2_iface;
29 LONG ref;
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 );
50 return S_OK;
53 if (IsEqualGUID( iid, &IID_IPackageManager2 ))
55 *out = &impl->IPackageManager2_iface;
56 IInspectable_AddRef( *out );
57 return S_OK;
60 FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid ) );
61 *out = NULL;
62 return E_NOINTERFACE;
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 );
70 return 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 );
81 return ref;
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 );
87 return E_NOTIMPL;
90 static HRESULT WINAPI package_manager_GetRuntimeClassName( IPackageManager *iface, HSTRING *class_name )
92 FIXME( "iface %p, class_name %p stub!\n", iface, class_name );
93 return E_NOTIMPL;
96 static HRESULT WINAPI package_manager_GetTrustLevel( IPackageManager *iface, TrustLevel *trust_level )
98 FIXME( "iface %p, trust_level %p stub!\n", iface, trust_level );
99 return E_NOTIMPL;
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 );
106 return E_NOTIMPL;
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 );
113 return E_NOTIMPL;
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 );
120 return E_NOTIMPL;
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 );
127 return E_NOTIMPL;
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 );
134 return E_NOTIMPL;
137 static HRESULT WINAPI package_manager_FindPackages( IPackageManager *iface, IIterable_Package **packages )
139 FIXME( "iface %p, packages %p stub!\n", iface, packages );
140 return E_NOTIMPL;
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 );
146 return E_NOTIMPL;
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;
154 return E_NOTIMPL;
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 );
161 return E_NOTIMPL;
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 );
167 return E_NOTIMPL;
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);
173 return E_NOTIMPL;
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 );
179 return E_NOTIMPL;
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 );
186 return E_NOTIMPL;
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 );
193 return E_NOTIMPL;
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 );
200 return E_NOTIMPL;
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 );
206 return E_NOTIMPL;
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 );
243 return E_NOTIMPL;
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 );
250 return E_NOTIMPL;
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 );
257 return E_NOTIMPL;
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 );
263 return E_NOTIMPL;
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 );
270 return E_NOTIMPL;
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 );
277 return E_NOTIMPL;
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 );
284 return E_NOTIMPL;
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 );
291 return E_NOTIMPL;
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 );
298 return E_NOTIMPL;
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 );
305 return E_NOTIMPL;
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;
333 LONG ref;
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 );
353 return S_OK;
356 FIXME( "%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid( iid ) );
357 *out = NULL;
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 );
366 return 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 );
374 return 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 );
380 return E_NOTIMPL;
383 static HRESULT WINAPI factory_GetRuntimeClassName( IActivationFactory *iface, HSTRING *class_name )
385 FIXME( "iface %p, class_name %p stub!\n", iface, class_name );
386 return E_NOTIMPL;
389 static HRESULT WINAPI factory_GetTrustLevel( IActivationFactory *iface, TrustLevel *trust_level )
391 FIXME( "iface %p, trust_level %p stub!\n", iface, trust_level );
392 return E_NOTIMPL;
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) )))
403 *instance = NULL;
404 return E_OUTOFMEMORY;
407 impl->IPackageManager_iface.lpVtbl = &package_manager_vtbl;
408 impl->IPackageManager2_iface.lpVtbl = &package_manager2_vtbl;
409 impl->ref = 1;
411 *instance = (IInspectable *)&impl->IPackageManager_iface;
412 return S_OK;
415 static const struct IActivationFactoryVtbl factory_vtbl =
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,
428 static struct package_manager_statics package_manager_statics =
430 {&factory_vtbl},
434 IActivationFactory *package_manager_factory = &package_manager_statics.IActivationFactory_iface;