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 _DISMAPI_H_
  8#define _DISMAPI_H_
  9
 10#include <winapifamily.h>
 11
 12#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
 13
 14#ifdef __cplusplus
 15extern "C"
 16{
 17#endif
 18
 19typedef UINT DismSession;
 20
 21typedef void(CALLBACK *DISM_PROGRESS_CALLBACK)(UINT Current, UINT Total, PVOID UserData);
 22
 23#define DISM_ONLINE_IMAGE L"DISM_{53BFAE52-B167-4E2F-A258-0A37B57FF845}"
 24
 25#define DISM_SESSION_DEFAULT 0
 26
 27#define DISM_MOUNT_READWRITE 0x00000000
 28#define DISM_MOUNT_READONLY 0x00000001
 29#define DISM_MOUNT_OPTIMIZE 0x00000002
 30#define DISM_MOUNT_CHECK_INTEGRITY 0x00000004
 31
 32#define DISM_COMMIT_IMAGE 0x00000000
 33#define DISM_DISCARD_IMAGE 0x00000001
 34
 35#define DISM_COMMIT_GENERATE_INTEGRITY 0x00010000
 36#define DISM_COMMIT_APPEND 0x00020000
 37#define DISM_COMMIT_MASK 0xffff0000
 38
 39/* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-enumerations */
 40
 41typedef enum _DismLogLevel
 42{
 43    DismLogErrors = 0,
 44    DismLogErrorsWarnings,
 45    DismLogErrorsWarningsInfo
 46} DismLogLevel;
 47
 48typedef enum _DismImageIdentifier
 49{
 50    DismImageIndex = 0,
 51    DismImageName
 52} DismImageIdentifier;
 53
 54typedef enum _DismMountMode
 55{
 56    DismReadWrite = 0,
 57    DismReadOnly
 58} DismMountMode;
 59
 60typedef enum _DismImageType
 61{
 62    DismImageTypeUnsupported = -1,
 63    DismImageTypeWim = 0,
 64    DismImageTypeVhd = 1
 65} DismImageType;
 66
 67typedef enum _DismImageBootable
 68{
 69    DismImageBootableYes = 0,
 70    DismImageBootableNo,
 71    DismImageBootableUnknown
 72} DismImageBootable;
 73
 74typedef enum _DismMountStatus
 75{
 76    DismMountStatusOk = 0,
 77    DismMountStatusNeedsRemount,
 78    DismMountStatusInvalid
 79} DismMountStatus;
 80
 81typedef enum _DismImageHealthState
 82{
 83    DismImageHealthy = 0,
 84    DismImageRepairable,
 85    DismImageNonRepairable
 86} DismImageHealthState;
 87
 88typedef enum _DismPackageIdentifier
 89{
 90    DismPackageNone = 0,
 91    DismPackageName,
 92    DismPackagePath
 93} DismPackageIdentifier;
 94
 95typedef enum _DismPackageFeatureState
 96{
 97    DismStateNotPresent = 0,
 98    DismStateUninstallPending,
 99    DismStateStaged,
100    DismStateResolved,
101    DismStateRemoved = DismStateResolved,
102    DismStateInstalled,
103    DismStateInstallPending,
104    DismStateSuperseded,
105    DismStatePartiallyInstalled
106} DismPackageFeatureState;
107
108typedef enum _DismReleaseType
109{
110    DismReleaseTypeCriticalUpdate = 0,
111    DismReleaseTypeDriver,
112    DismReleaseTypeFeaturePack,
113    DismReleaseTypeHotfix,
114    DismReleaseTypeSecurityUpdate,
115    DismReleaseTypeSoftwareUpdate,
116    DismReleaseTypeUpdate,
117    DismReleaseTypeUpdateRollup,
118    DismReleaseTypeLanguagePack,
119    DismReleaseTypeFoundation,
120    DismReleaseTypeServicePack,
121    DismReleaseTypeProduct,
122    DismReleaseTypeLocalPack,
123    DismReleaseTypeOther,
124    DismReleaseTypeOnDemandPack
125} DismReleaseType;
126
127typedef enum _DismRestartType
128{
129    DismRestartNo = 0,
130    DismRestartPossible,
131    DismRestartRequired
132} DismRestartType;
133
134typedef enum _DismDriverSignature
135{
136    DismDriverSignatureUnknown = 0,
137    DismDriverSignatureUnsigned = 1,
138    DismDriverSignatureSigned = 2
139} DismDriverSignature;
140
141typedef enum _DismFullyOfflineInstallableType
142{
143    DismFullyOfflineInstallable = 0,
144    DismFullyOfflineNotInstallable,
145    DismFullyOfflineInstallableUndetermined
146} DismFullyOfflineInstallableType;
147
148/* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-structures */
149
150#pragma pack(push, 1)
151
152typedef struct _DismPackage
153{
154    PCWSTR PackageName;
155    DismPackageFeatureState PackageState;
156    DismReleaseType ReleaseType;
157    SYSTEMTIME InstallTime;
158} DismPackage;
159
160typedef struct _DismCustomProperty
161{
162    PCWSTR Name;
163    PCWSTR Value;
164    PCWSTR Path;
165} DismCustomProperty;
166
167typedef struct _DismFeature
168{
169    PCWSTR FeatureName;
170    DismPackageFeatureState State;
171} DismFeature;
172
173typedef struct _DismCapability
174{
175    PCWSTR Name;
176    DismPackageFeatureState State;
177} DismCapability;
178
179typedef struct _DismPackageInfo
180{
181    PCWSTR PackageName;
182    DismPackageFeatureState PackageState;
183    DismReleaseType ReleaseType;
184    SYSTEMTIME InstallTime;
185    WINBOOL Applicable;
186    PCWSTR Copyright;
187    PCWSTR Company;
188    SYSTEMTIME CreationTime;
189    PCWSTR DisplayName;
190    PCWSTR Description;
191    PCWSTR InstallClient;
192    PCWSTR InstallPackageName;
193    SYSTEMTIME LastUpdateTime;
194    PCWSTR ProductName;
195    PCWSTR ProductVersion;
196    DismRestartType RestartRequired;
197    DismFullyOfflineInstallableType FullyOffline;
198    PCWSTR SupportInformation;
199    DismCustomProperty *CustomProperty;
200    UINT CustomPropertyCount;
201    DismFeature *Feature;
202    UINT FeatureCount;
203} DismPackageInfo;
204
205#ifdef __cplusplus
206typedef struct _DismPackageInfoEx : public _DismPackageInfo
207{
208#else
209typedef struct _DismPackageInfoEx
210{
211    DismPackageInfo;
212#endif
213    PCWSTR CapabilityId;
214} DismPackageInfoEx;
215
216typedef struct _DismFeatureInfo
217{
218    PCWSTR FeatureName;
219    DismPackageFeatureState FeatureState;
220    PCWSTR DisplayName;
221    PCWSTR Description;
222    DismRestartType RestartRequired;
223    DismCustomProperty *CustomProperty;
224    UINT CustomPropertyCount;
225} DismFeatureInfo;
226
227typedef struct _DismCapabilityInfo
228{
229    PCWSTR Name;
230    DismPackageFeatureState State;
231    PCWSTR DisplayName;
232    PCWSTR Description;
233    DWORD DownloadSize;
234    DWORD InstallSize;
235} DismCapabilityInfo;
236
237typedef struct _DismString
238{
239    PCWSTR Value;
240} DismString;
241
242typedef DismString DismLanguage;
243
244typedef struct _DismWimCustomizedInfo
245{
246    UINT Size;
247    UINT DirectoryCount;
248    UINT FileCount;
249    SYSTEMTIME CreatedTime;
250    SYSTEMTIME ModifiedTime;
251} DismWimCustomizedInfo;
252
253typedef struct _DismImageInfo
254{
255    DismImageType ImageType;
256    UINT ImageIndex;
257    PCWSTR ImageName;
258    PCWSTR ImageDescription;
259    UINT64 ImageSize;
260    UINT Architecture;
261    PCWSTR ProductName;
262    PCWSTR EditionId;
263    PCWSTR InstallationType;
264    PCWSTR Hal;
265    PCWSTR ProductType;
266    PCWSTR ProductSuite;
267    UINT MajorVersion;
268    UINT MinorVersion;
269    UINT Build;
270    UINT SpBuild;
271    UINT SpLevel;
272    DismImageBootable Bootable;
273    PCWSTR SystemRoot;
274    DismLanguage *Language;
275    UINT LanguageCount;
276    UINT DefaultLanguageIndex;
277    VOID *CustomizedInfo;
278} DismImageInfo;
279
280typedef struct _DismMountedImageInfo
281{
282    PCWSTR MountPath;
283    PCWSTR ImageFilePath;
284    UINT ImageIndex;
285    DismMountMode MountMode;
286    DismMountStatus MountStatus;
287} DismMountedImageInfo;
288
289typedef struct _DismDriverPackage
290{
291    PCWSTR PublishedName;
292    PCWSTR OriginalFileName;
293    WINBOOL InBox;
294    PCWSTR CatalogFile;
295    PCWSTR ClassName;
296    PCWSTR ClassGuid;
297    PCWSTR ClassDescription;
298    WINBOOL BootCritical;
299    DismDriverSignature DriverSignature;
300    PCWSTR ProviderName;
301    SYSTEMTIME Date;
302    UINT MajorVersion;
303    UINT MinorVersion;
304    UINT Build;
305    UINT Revision;
306} DismDriverPackage;
307
308typedef struct _DismDriver
309{
310    PCWSTR ManufacturerName;
311    PCWSTR HardwareDescription;
312    PCWSTR HardwareId;
313    UINT Architecture;
314    PCWSTR ServiceName;
315    PCWSTR CompatibleIds;
316    PCWSTR ExcludeIds;
317} DismDriver;
318
319#pragma pack(pop)
320
321/* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-functions */
322
323HRESULT WINAPI DismInitialize (DismLogLevel LogLevel, PCWSTR LogFilePath, PCWSTR ScratchDirectory);
324HRESULT WINAPI DismShutdown (void);
325HRESULT WINAPI DismMountImage (PCWSTR ImageFilePath, PCWSTR MountPath, UINT ImageIndex, PCWSTR ImageName, DismImageIdentifier ImageIdentifier, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
326HRESULT WINAPI DismUnmountImage (PCWSTR MountPath, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
327HRESULT WINAPI DismOpenSession (PCWSTR ImagePath, PCWSTR WindowsDirectory, PCWSTR SystemDrive, DismSession *Session);
328HRESULT WINAPI DismCloseSession (DismSession Session);
329HRESULT WINAPI DismGetLastErrorMessage (DismString **ErrorMessage);
330HRESULT WINAPI DismRemountImage (PCWSTR MountPath);
331HRESULT WINAPI DismCommitImage (DismSession Session, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
332HRESULT WINAPI DismGetImageInfo (PCWSTR ImageFilePath, DismImageInfo **ImageInfo, UINT *Count);
333HRESULT WINAPI DismGetMountedImageInfo (DismMountedImageInfo **MountedImageInfo, UINT *Count);
334HRESULT WINAPI DismCleanupMountpoints (void);
335HRESULT WINAPI DismCheckImageHealth (DismSession Session, WINBOOL ScanImage, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData, DismImageHealthState *ImageHealth);
336HRESULT WINAPI DismRestoreImageHealth (DismSession Session, PCWSTR *SourcePaths, UINT SourcePathCount, WINBOOL LimitAccess, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
337HRESULT WINAPI DismDelete (VOID *DismStructure);
338HRESULT WINAPI DismAddPackage (DismSession Session, PCWSTR PackagePath, WINBOOL IgnoreCheck, WINBOOL PreventPending, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
339HRESULT WINAPI DismRemovePackage (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
340HRESULT WINAPI DismEnableFeature (DismSession Session, PCWSTR FeatureName, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, WINBOOL LimitAccess, PCWSTR *SourcePaths, UINT SourcePathCount, WINBOOL EnableAll, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
341HRESULT WINAPI DismDisableFeature (DismSession Session, PCWSTR FeatureName, PCWSTR PackageName, WINBOOL RemovePayload, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
342HRESULT WINAPI DismGetPackages (DismSession Session, DismPackage **Package, UINT *Count);
343HRESULT WINAPI DismGetPackageInfo (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismPackageInfo **PackageInfo);
344HRESULT WINAPI DismGetPackageInfoEx (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismPackageInfoEx **PackageInfoEx);
345HRESULT WINAPI DismGetFeatures (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeature **Feature, UINT *Count);
346HRESULT WINAPI DismGetFeatureInfo (DismSession Session, PCWSTR FeatureName, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeatureInfo **FeatureInfo);
347HRESULT WINAPI DismGetFeatureParent (DismSession Session, PCWSTR FeatureName, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeature **Feature, UINT *Count);
348HRESULT WINAPI DismApplyUnattend (DismSession Session, PCWSTR UnattendFile, WINBOOL SingleSession);
349HRESULT WINAPI DismAddDriver (DismSession Session, PCWSTR DriverPath, WINBOOL ForceUnsigned);
350HRESULT WINAPI DismRemoveDriver (DismSession Session, PCWSTR DriverPath);
351HRESULT WINAPI DismGetDrivers (DismSession Session, WINBOOL AllDrivers, DismDriverPackage **DriverPackage, UINT *Count);
352HRESULT WINAPI DismGetDriverInfo (DismSession Session, PCWSTR DriverPath, DismDriver **Driver, UINT *Count, DismDriverPackage **DriverPackage);
353HRESULT WINAPI DismGetCapabilities (DismSession Session, DismCapability **Capability, UINT *Count);
354HRESULT WINAPI DismGetCapabilityInfo (DismSession Session, PCWSTR Name, DismCapabilityInfo **Info);
355HRESULT WINAPI DismAddCapability (DismSession Session, PCWSTR Name, WINBOOL LimitAccess, PCWSTR *SourcePaths, UINT SourcePathCount, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
356HRESULT WINAPI DismRemoveCapability (DismSession Session, PCWSTR Name, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
357
358#define DISMAPI_S_RELOAD_IMAGE_SESSION_REQUIRED 0x00000001
359#define DISMAPI_E_DISMAPI_NOT_INITIALIZED 0xc0040001
360#define DISMAPI_E_SHUTDOWN_IN_PROGRESS 0xc0040002
361#define DISMAPI_E_OPEN_SESSION_HANDLES 0xc0040003
362#define DISMAPI_E_INVALID_DISM_SESSION 0xc0040004
363#define DISMAPI_E_INVALID_IMAGE_INDEX 0xc0040005
364#define DISMAPI_E_INVALID_IMAGE_NAME 0xc0040006
365#define DISMAPI_E_UNABLE_TO_UNMOUNT_IMAGE_PATH 0xc0040007
366#define DISMAPI_E_LOGGING_DISABLED 0xc0040009
367#define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_UNMOUNT_IMAGE_PATH 0xc004000a
368#define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_MOUNT_IMAGE_PATH 0xc004000b
369#define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_REMOUNT_IMAGE_PATH 0xc004000c
370#define DISMAPI_E_PARENT_FEATURE_DISABLED 0xc004000d
371#define DISMAPI_E_MUST_SPECIFY_ONLINE_IMAGE 0xc004000e
372#define DISMAPI_E_INVALID_PRODUCT_KEY 0xc004000f
373#define DISMAPI_E_NEEDS_REMOUNT 0xc1510114
374#define DISMAPI_E_UNKNOWN_FEATURE 0x800f080c
375#define DISMAPI_E_BUSY 0x800f0902
376
377#ifdef __cplusplus
378}
379#endif
380
381#endif /* WINAPI_PARTITION_DESKTOP */
382
383#endif /* _DISMAPI_H_ */