master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6
  7#ifndef _APPMODEL_H_
  8#define _APPMODEL_H_
  9
 10#include <minappmodel.h>
 11
 12#if defined(__cplusplus)
 13extern "C" {
 14#endif
 15
 16#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
 17
 18#include <pshpack4.h>
 19
 20typedef struct PACKAGE_VERSION {
 21  __C89_NAMELESS union {
 22    UINT64 Version;
 23    __C89_NAMELESS struct {
 24      USHORT Revision;
 25      USHORT Build;
 26      USHORT Minor;
 27      USHORT Major;
 28    };
 29  };
 30} PACKAGE_VERSION;
 31
 32typedef struct PACKAGE_ID {
 33  UINT32 reserved;
 34  UINT32 processorArchitecture;
 35  PACKAGE_VERSION version;
 36  PWSTR name;
 37  PWSTR publisher;
 38  PWSTR resourceId;
 39  PWSTR publisherId;
 40} PACKAGE_ID;
 41
 42#include <poppack.h>
 43
 44WINBASEAPI LONG WINAPI GetCurrentPackageId(UINT32 *bufferLength, BYTE *buffer);
 45WINBASEAPI LONG WINAPI GetCurrentPackageFullName(UINT32 *packageFullNameLength, PWSTR packageFullName);
 46WINBASEAPI LONG WINAPI GetCurrentPackageFamilyName(UINT32 *packageFamilyNameLength, PWSTR packageFamilyName);
 47WINBASEAPI LONG WINAPI GetCurrentPackagePath(UINT32 *pathLength, PWSTR path);
 48WINBASEAPI LONG WINAPI GetPackageId(HANDLE hProcess, UINT32 *bufferLength, BYTE *buffer);
 49WINBASEAPI LONG WINAPI GetPackageFullName(HANDLE hProcess, UINT32 *packageFullNameLength, PWSTR packageFullName);
 50WINBASEAPI LONG WINAPI GetPackageFullNameFromToken(HANDLE token, UINT32 *packageFullNameLength, PWSTR packageFullName);
 51WINBASEAPI LONG WINAPI GetPackageFamilyName(HANDLE hProcess, UINT32 *packageFamilyNameLength, PWSTR packageFamilyName);
 52WINBASEAPI LONG WINAPI GetPackageFamilyNameFromToken(HANDLE token, UINT32 *packageFamilyNameLength, PWSTR packageFamilyName);
 53WINBASEAPI LONG WINAPI GetPackagePath(const PACKAGE_ID *packageId, const UINT32 reserved, UINT32 *pathLength, PWSTR path);
 54WINBASEAPI LONG WINAPI GetPackagePathByFullName(PCWSTR packageFullName, UINT32 *pathLength, PWSTR path);
 55WINBASEAPI LONG WINAPI GetStagedPackagePathByFullName(PCWSTR packageFullName, UINT32 *pathLength, PWSTR path);
 56
 57#if NTDDI_VERSION >= NTDDI_WIN10_19H1
 58typedef enum PackagePathType {
 59  PackagePathType_Install = 0,
 60  PackagePathType_Mutable = 1,
 61  PackagePathType_Effective = 2
 62#if NTDDI_VERSION >= NTDDI_WIN10_VB
 63  ,PackagePathType_MachineExternal = 3
 64  ,PackagePathType_UserExternal = 4
 65  ,PackagePathType_EffectiveExternal = 5
 66#endif
 67} PackagePathType;
 68
 69WINBASEAPI LONG WINAPI GetPackagePathByFullName2(PCWSTR packageFullName, PackagePathType packagePathType, UINT32 *pathLength, PWSTR path);
 70WINBASEAPI LONG WINAPI GetStagedPackagePathByFullName2(PCWSTR packageFullName, PackagePathType packagePathType, UINT32 *pathLength, PWSTR path);
 71WINBASEAPI LONG WINAPI GetCurrentPackageInfo2(const UINT32 flags, PackagePathType packagePathType, UINT32 *bufferLength, BYTE *buffer, UINT32 *count);
 72WINBASEAPI LONG WINAPI GetCurrentPackagePath2(PackagePathType packagePathType, UINT32 *pathLength, PWSTR path);
 73
 74#endif /* NTDDI_VERSION >= NTDDI_WIN10_19H1 */
 75
 76WINBASEAPI LONG WINAPI GetCurrentApplicationUserModelId(UINT32 *applicationUserModelIdLength, PWSTR applicationUserModelId);
 77WINBASEAPI LONG WINAPI GetApplicationUserModelId(HANDLE hProcess, UINT32 *applicationUserModelIdLength, PWSTR applicationUserModelId);
 78WINBASEAPI LONG WINAPI GetApplicationUserModelIdFromToken(HANDLE token, UINT32 *applicationUserModelIdLength, PWSTR applicationUserModelId);
 79WINBASEAPI LONG WINAPI VerifyPackageFullName(PCWSTR packageFullName);
 80WINBASEAPI LONG WINAPI VerifyPackageFamilyName(PCWSTR packageFamilyName);
 81WINBASEAPI LONG WINAPI VerifyPackageId(const PACKAGE_ID *packageId);
 82WINBASEAPI LONG WINAPI VerifyApplicationUserModelId(PCWSTR applicationUserModelId);
 83WINBASEAPI LONG WINAPI VerifyPackageRelativeApplicationId(PCWSTR packageRelativeApplicationId);
 84WINBASEAPI LONG WINAPI PackageIdFromFullName(PCWSTR packageFullName, const UINT32 flags, UINT32 *bufferLength, BYTE *buffer);
 85WINBASEAPI LONG WINAPI PackageFullNameFromId(const PACKAGE_ID *packageId, UINT32 *packageFullNameLength, PWSTR packageFullName);
 86WINBASEAPI LONG WINAPI PackageFamilyNameFromId(const PACKAGE_ID *packageId, UINT32 *packageFamilyNameLength, PWSTR packageFamilyName);
 87WINBASEAPI LONG WINAPI PackageFamilyNameFromFullName(PCWSTR packageFullName, UINT32 *packageFamilyNameLength, PWSTR packageFamilyName);
 88WINBASEAPI LONG WINAPI PackageNameAndPublisherIdFromFamilyName(PCWSTR packageFamilyName, UINT32 *packageNameLength, PWSTR packageName, UINT32 *packagePublisherIdLength, PWSTR packagePublisherId);
 89WINBASEAPI LONG WINAPI FormatApplicationUserModelId(PCWSTR packageFamilyName, PCWSTR packageRelativeApplicationId, UINT32 *applicationUserModelIdLength, PWSTR applicationUserModelId);
 90WINBASEAPI LONG WINAPI ParseApplicationUserModelId(PCWSTR applicationUserModelId, UINT32 *packageFamilyNameLength, PWSTR packageFamilyName, UINT32 *packageRelativeApplicationIdLength, PWSTR packageRelativeApplicationId);
 91WINBASEAPI LONG WINAPI GetPackagesByPackageFamily(PCWSTR packageFamilyName, UINT32 *count, PWSTR *packageFullNames, UINT32 *bufferLength, WCHAR *buffer);
 92WINBASEAPI LONG WINAPI FindPackagesByPackageFamily(PCWSTR packageFamilyName, UINT32 packageFilters, UINT32 *count, PWSTR *packageFullNames, UINT32 *bufferLength, WCHAR *buffer, UINT32 *packageProperties);
 93
 94typedef enum PackageOrigin {
 95  PackageOrigin_Unknown = 0,
 96  PackageOrigin_Unsigned = 1,
 97  PackageOrigin_Inbox = 2,
 98  PackageOrigin_Store = 3,
 99  PackageOrigin_DeveloperUnsigned = 4,
100  PackageOrigin_DeveloperSigned = 5,
101  PackageOrigin_LineOfBusiness = 6
102} PackageOrigin;
103
104WINBASEAPI LONG WINAPI GetStagedPackageOrigin(PCWSTR packageFullName, PackageOrigin *origin);
105
106#define PACKAGE_PROPERTY_FRAMEWORK 0x00000001
107#define PACKAGE_PROPERTY_RESOURCE 0x00000002
108#define PACKAGE_PROPERTY_BUNDLE 0x00000004
109#define PACKAGE_PROPERTY_OPTIONAL 0x00000008
110#define PACKAGE_FILTER_HEAD 0x00000010
111#define PACKAGE_FILTER_DIRECT 0x00000020
112#define PACKAGE_FILTER_RESOURCE 0x00000040
113#define PACKAGE_FILTER_BUNDLE 0x00000080
114#define PACKAGE_INFORMATION_BASIC 0x00000000
115#define PACKAGE_INFORMATION_FULL 0x00000100
116#define PACKAGE_PROPERTY_DEVELOPMENT_MODE 0x00010000
117#define PACKAGE_FILTER_OPTIONAL 0x00020000
118#define PACKAGE_PROPERTY_IS_IN_RELATED_SET 0x00040000
119#define PACKAGE_FILTER_IS_IN_RELATED_SET PACKAGE_PROPERTY_IS_IN_RELATED_SET
120#define PACKAGE_PROPERTY_STATIC 0x00080000
121#define PACKAGE_FILTER_STATIC PACKAGE_PROPERTY_STATIC
122#define PACKAGE_PROPERTY_DYNAMIC 0x00100000
123#define PACKAGE_FILTER_DYNAMIC PACKAGE_PROPERTY_DYNAMIC
124#if NTDDI_VERSION >= NTDDI_WIN10_MN
125#define PACKAGE_PROPERTY_HOSTRUNTIME 0x00200000
126#define PACKAGE_FILTER_HOSTRUNTIME PACKAGE_PROPERTY_HOSTRUNTIME
127#endif
128
129typedef struct _PACKAGE_INFO_REFERENCE {
130  void *reserved;
131} PACKAGE_INFO_REFERENCE;
132
133#include <pshpack4.h>
134
135typedef struct PACKAGE_INFO {
136  UINT32 reserved;
137  UINT32 flags;
138  PWSTR path;
139  PWSTR packageFullName;
140  PWSTR packageFamilyName;
141  PACKAGE_ID packageId;
142} PACKAGE_INFO;
143
144#include <poppack.h>
145
146WINBASEAPI LONG WINAPI GetCurrentPackageInfo(const UINT32 flags, UINT32 *bufferLength, BYTE *buffer, UINT32 *count);
147WINBASEAPI LONG WINAPI OpenPackageInfoByFullName(PCWSTR packageFullName, const UINT32 reserved, PACKAGE_INFO_REFERENCE *packageInfoReference);
148WINBASEAPI LONG WINAPI OpenPackageInfoByFullNameForUser(PSID userSid, PCWSTR packageFullName, const UINT32 reserved, PACKAGE_INFO_REFERENCE *packageInfoReference);
149WINBASEAPI LONG WINAPI ClosePackageInfo(PACKAGE_INFO_REFERENCE packageInfoReference);
150WINBASEAPI LONG WINAPI GetPackageInfo(PACKAGE_INFO_REFERENCE packageInfoReference, const UINT32 flags, UINT32 *bufferLength, BYTE *buffer, UINT32 *count);
151WINBASEAPI LONG WINAPI GetPackageApplicationIds(PACKAGE_INFO_REFERENCE packageInfoReference, UINT32 *bufferLength, BYTE *buffer, UINT32 *count);
152
153#if NTDDI_VERSION >= NTDDI_WIN10_19H1
154WINBASEAPI LONG WINAPI GetPackageInfo2(PACKAGE_INFO_REFERENCE packageInfoReference, const UINT32 flags, PackagePathType packagePathType, UINT32 *bufferLength, BYTE *buffer, UINT32 *count);
155#endif
156
157WINBASEAPI HRESULT WINAPI CheckIsMSIXPackage(PCWSTR packageFullName, WINBOOL *isMSIXPackage);
158
159#if NTDDI_VERSION >= NTDDI_WIN10_CO
160
161typedef enum CreatePackageDependencyOptions {
162  CreatePackageDependencyOptions_None = 0,
163  CreatePackageDependencyOptions_DoNotVerifyDependencyResolution = 0x00000001,
164  CreatePackageDependencyOptions_ScopeIsSystem = 0x00000002
165} CreatePackageDependencyOptions;
166DEFINE_ENUM_FLAG_OPERATORS(CreatePackageDependencyOptions)
167
168typedef enum PackageDependencyLifetimeKind {
169  PackageDependencyLifetimeKind_Process = 0,
170  PackageDependencyLifetimeKind_FilePath = 1,
171  PackageDependencyLifetimeKind_RegistryKey = 2
172} PackageDependencyLifetimeKind;
173
174typedef enum AddPackageDependencyOptions {
175  AddPackageDependencyOptions_None = 0,
176  AddPackageDependencyOptions_PrependIfRankCollision = 0x00000001
177} AddPackageDependencyOptions;
178DEFINE_ENUM_FLAG_OPERATORS(AddPackageDependencyOptions)
179
180#define PACKAGE_DEPENDENCY_RANK_DEFAULT 0
181
182typedef enum PackageDependencyProcessorArchitectures {
183  PackageDependencyProcessorArchitectures_None = 0,
184  PackageDependencyProcessorArchitectures_Neutral = 0x00000001,
185  PackageDependencyProcessorArchitectures_X86 = 0x00000002,
186  PackageDependencyProcessorArchitectures_X64 = 0x00000004,
187  PackageDependencyProcessorArchitectures_Arm = 0x00000008,
188  PackageDependencyProcessorArchitectures_Arm64 = 0x00000010,
189  PackageDependencyProcessorArchitectures_X86A64 = 0x00000020
190} PackageDependencyProcessorArchitectures;
191DEFINE_ENUM_FLAG_OPERATORS(PackageDependencyProcessorArchitectures)
192
193DECLARE_HANDLE(PACKAGEDEPENDENCY_CONTEXT);
194
195WINBASEAPI HRESULT WINAPI TryCreatePackageDependency(PSID user, PCWSTR packageFamilyName, PACKAGE_VERSION minVersion, PackageDependencyProcessorArchitectures packageDependencyProcessorArchitectures, PackageDependencyLifetimeKind lifetimeKind, PCWSTR lifetimeArtifact, CreatePackageDependencyOptions options, PWSTR *packageDependencyId);
196WINBASEAPI HRESULT WINAPI DeletePackageDependency(PCWSTR packageDependencyId);
197WINBASEAPI HRESULT WINAPI AddPackageDependency(PCWSTR packageDependencyId, INT32 rank, AddPackageDependencyOptions options, PACKAGEDEPENDENCY_CONTEXT *packageDependencyContext, PWSTR *packageFullName);
198WINBASEAPI HRESULT WINAPI RemovePackageDependency(PACKAGEDEPENDENCY_CONTEXT packageDependencyContext);
199WINBASEAPI HRESULT WINAPI GetResolvedPackageFullNameForPackageDependency(PCWSTR packageDependencyId, PWSTR *packageFullName);
200WINBASEAPI HRESULT WINAPI GetIdForPackageDependencyContext(PACKAGEDEPENDENCY_CONTEXT packageDependencyContext, PWSTR *packageDependencyId);
201
202#endif /* NTDDI_VERSION >= NTDDI_WIN10_CO */
203
204#if NTDDI_VERSION >= NTDDI_WIN10_NI
205WINBASEAPI UINT32 WINAPI GetPackageGraphRevisionId(void);
206#endif
207
208typedef enum AppPolicyLifecycleManagement {
209  AppPolicyLifecycleManagement_Unmanaged = 0,
210  AppPolicyLifecycleManagement_Managed = 1
211} AppPolicyLifecycleManagement;
212
213WINBASEAPI LONG WINAPI AppPolicyGetLifecycleManagement(HANDLE processToken, AppPolicyLifecycleManagement *policy);
214
215typedef enum AppPolicyWindowingModel {
216  AppPolicyWindowingModel_None = 0,
217  AppPolicyWindowingModel_Universal = 1,
218  AppPolicyWindowingModel_ClassicDesktop = 2,
219  AppPolicyWindowingModel_ClassicPhone = 3
220} AppPolicyWindowingModel;
221
222WINBASEAPI LONG WINAPI AppPolicyGetWindowingModel(HANDLE processToken, AppPolicyWindowingModel *policy);
223
224typedef enum AppPolicyMediaFoundationCodecLoading {
225  AppPolicyMediaFoundationCodecLoading_All = 0,
226  AppPolicyMediaFoundationCodecLoading_InboxOnly = 1
227} AppPolicyMediaFoundationCodecLoading;
228
229WINBASEAPI LONG WINAPI AppPolicyGetMediaFoundationCodecLoading(HANDLE processToken, AppPolicyMediaFoundationCodecLoading *policy);
230
231typedef enum AppPolicyClrCompat {
232  AppPolicyClrCompat_Other = 0,
233  AppPolicyClrCompat_ClassicDesktop = 1,
234  AppPolicyClrCompat_Universal = 2,
235  AppPolicyClrCompat_PackagedDesktop = 3
236} AppPolicyClrCompat;
237
238WINBASEAPI LONG WINAPI AppPolicyGetClrCompat(HANDLE processToken, AppPolicyClrCompat *policy);
239
240typedef enum AppPolicyThreadInitializationType {
241  AppPolicyThreadInitializationType_None = 0,
242  AppPolicyThreadInitializationType_InitializeWinRT = 1
243} AppPolicyThreadInitializationType;
244
245WINBASEAPI LONG WINAPI AppPolicyGetThreadInitializationType(HANDLE processToken, AppPolicyThreadInitializationType *policy);
246
247typedef enum AppPolicyShowDeveloperDiagnostic {
248  AppPolicyShowDeveloperDiagnostic_None = 0,
249  AppPolicyShowDeveloperDiagnostic_ShowUI = 1
250} AppPolicyShowDeveloperDiagnostic;
251
252WINBASEAPI LONG WINAPI AppPolicyGetShowDeveloperDiagnostic(HANDLE processToken, AppPolicyShowDeveloperDiagnostic *policy);
253
254typedef enum AppPolicyProcessTerminationMethod {
255  AppPolicyProcessTerminationMethod_ExitProcess = 0,
256  AppPolicyProcessTerminationMethod_TerminateProcess = 1
257} AppPolicyProcessTerminationMethod;
258
259WINBASEAPI LONG WINAPI AppPolicyGetProcessTerminationMethod(HANDLE processToken, AppPolicyProcessTerminationMethod *policy);
260
261typedef enum AppPolicyCreateFileAccess {
262  AppPolicyCreateFileAccess_Full = 0,
263  AppPolicyCreateFileAccess_Limited = 1
264} AppPolicyCreateFileAccess;
265
266WINBASEAPI LONG WINAPI AppPolicyGetCreateFileAccess(HANDLE processToken, AppPolicyCreateFileAccess *policy);
267
268#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */
269
270#if defined(__cplusplus)
271}
272#endif
273
274#endif /* _APPMODEL_H_ */