|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the mingw-w64 runtime package. | 
|  | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
|  | */ | 
|  |  | 
|  | #ifndef _DISMAPI_H_ | 
|  | #define _DISMAPI_H_ | 
|  |  | 
|  | #include <winapifamily.h> | 
|  |  | 
|  | #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" | 
|  | { | 
|  | #endif | 
|  |  | 
|  | typedef UINT DismSession; | 
|  |  | 
|  | typedef void(CALLBACK *DISM_PROGRESS_CALLBACK)(UINT Current, UINT Total, PVOID UserData); | 
|  |  | 
|  | #define DISM_ONLINE_IMAGE L"DISM_{53BFAE52-B167-4E2F-A258-0A37B57FF845}" | 
|  |  | 
|  | #define DISM_SESSION_DEFAULT 0 | 
|  |  | 
|  | #define DISM_MOUNT_READWRITE 0x00000000 | 
|  | #define DISM_MOUNT_READONLY 0x00000001 | 
|  | #define DISM_MOUNT_OPTIMIZE 0x00000002 | 
|  | #define DISM_MOUNT_CHECK_INTEGRITY 0x00000004 | 
|  |  | 
|  | #define DISM_COMMIT_IMAGE 0x00000000 | 
|  | #define DISM_DISCARD_IMAGE 0x00000001 | 
|  |  | 
|  | #define DISM_COMMIT_GENERATE_INTEGRITY 0x00010000 | 
|  | #define DISM_COMMIT_APPEND 0x00020000 | 
|  | #define DISM_COMMIT_MASK 0xffff0000 | 
|  |  | 
|  | /* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-enumerations */ | 
|  |  | 
|  | typedef enum _DismLogLevel | 
|  | { | 
|  | DismLogErrors = 0, | 
|  | DismLogErrorsWarnings, | 
|  | DismLogErrorsWarningsInfo | 
|  | } DismLogLevel; | 
|  |  | 
|  | typedef enum _DismImageIdentifier | 
|  | { | 
|  | DismImageIndex = 0, | 
|  | DismImageName | 
|  | } DismImageIdentifier; | 
|  |  | 
|  | typedef enum _DismMountMode | 
|  | { | 
|  | DismReadWrite = 0, | 
|  | DismReadOnly | 
|  | } DismMountMode; | 
|  |  | 
|  | typedef enum _DismImageType | 
|  | { | 
|  | DismImageTypeUnsupported = -1, | 
|  | DismImageTypeWim = 0, | 
|  | DismImageTypeVhd = 1 | 
|  | } DismImageType; | 
|  |  | 
|  | typedef enum _DismImageBootable | 
|  | { | 
|  | DismImageBootableYes = 0, | 
|  | DismImageBootableNo, | 
|  | DismImageBootableUnknown | 
|  | } DismImageBootable; | 
|  |  | 
|  | typedef enum _DismMountStatus | 
|  | { | 
|  | DismMountStatusOk = 0, | 
|  | DismMountStatusNeedsRemount, | 
|  | DismMountStatusInvalid | 
|  | } DismMountStatus; | 
|  |  | 
|  | typedef enum _DismImageHealthState | 
|  | { | 
|  | DismImageHealthy = 0, | 
|  | DismImageRepairable, | 
|  | DismImageNonRepairable | 
|  | } DismImageHealthState; | 
|  |  | 
|  | typedef enum _DismPackageIdentifier | 
|  | { | 
|  | DismPackageNone = 0, | 
|  | DismPackageName, | 
|  | DismPackagePath | 
|  | } DismPackageIdentifier; | 
|  |  | 
|  | typedef enum _DismPackageFeatureState | 
|  | { | 
|  | DismStateNotPresent = 0, | 
|  | DismStateUninstallPending, | 
|  | DismStateStaged, | 
|  | DismStateResolved, | 
|  | DismStateRemoved = DismStateResolved, | 
|  | DismStateInstalled, | 
|  | DismStateInstallPending, | 
|  | DismStateSuperseded, | 
|  | DismStatePartiallyInstalled | 
|  | } DismPackageFeatureState; | 
|  |  | 
|  | typedef enum _DismReleaseType | 
|  | { | 
|  | DismReleaseTypeCriticalUpdate = 0, | 
|  | DismReleaseTypeDriver, | 
|  | DismReleaseTypeFeaturePack, | 
|  | DismReleaseTypeHotfix, | 
|  | DismReleaseTypeSecurityUpdate, | 
|  | DismReleaseTypeSoftwareUpdate, | 
|  | DismReleaseTypeUpdate, | 
|  | DismReleaseTypeUpdateRollup, | 
|  | DismReleaseTypeLanguagePack, | 
|  | DismReleaseTypeFoundation, | 
|  | DismReleaseTypeServicePack, | 
|  | DismReleaseTypeProduct, | 
|  | DismReleaseTypeLocalPack, | 
|  | DismReleaseTypeOther, | 
|  | DismReleaseTypeOnDemandPack | 
|  | } DismReleaseType; | 
|  |  | 
|  | typedef enum _DismRestartType | 
|  | { | 
|  | DismRestartNo = 0, | 
|  | DismRestartPossible, | 
|  | DismRestartRequired | 
|  | } DismRestartType; | 
|  |  | 
|  | typedef enum _DismDriverSignature | 
|  | { | 
|  | DismDriverSignatureUnknown = 0, | 
|  | DismDriverSignatureUnsigned = 1, | 
|  | DismDriverSignatureSigned = 2 | 
|  | } DismDriverSignature; | 
|  |  | 
|  | typedef enum _DismFullyOfflineInstallableType | 
|  | { | 
|  | DismFullyOfflineInstallable = 0, | 
|  | DismFullyOfflineNotInstallable, | 
|  | DismFullyOfflineInstallableUndetermined | 
|  | } DismFullyOfflineInstallableType; | 
|  |  | 
|  | /* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-structures */ | 
|  |  | 
|  | #pragma pack(push, 1) | 
|  |  | 
|  | typedef struct _DismPackage | 
|  | { | 
|  | PCWSTR PackageName; | 
|  | DismPackageFeatureState PackageState; | 
|  | DismReleaseType ReleaseType; | 
|  | SYSTEMTIME InstallTime; | 
|  | } DismPackage; | 
|  |  | 
|  | typedef struct _DismCustomProperty | 
|  | { | 
|  | PCWSTR Name; | 
|  | PCWSTR Value; | 
|  | PCWSTR Path; | 
|  | } DismCustomProperty; | 
|  |  | 
|  | typedef struct _DismFeature | 
|  | { | 
|  | PCWSTR FeatureName; | 
|  | DismPackageFeatureState State; | 
|  | } DismFeature; | 
|  |  | 
|  | typedef struct _DismCapability | 
|  | { | 
|  | PCWSTR Name; | 
|  | DismPackageFeatureState State; | 
|  | } DismCapability; | 
|  |  | 
|  | typedef struct _DismPackageInfo | 
|  | { | 
|  | PCWSTR PackageName; | 
|  | DismPackageFeatureState PackageState; | 
|  | DismReleaseType ReleaseType; | 
|  | SYSTEMTIME InstallTime; | 
|  | WINBOOL Applicable; | 
|  | PCWSTR Copyright; | 
|  | PCWSTR Company; | 
|  | SYSTEMTIME CreationTime; | 
|  | PCWSTR DisplayName; | 
|  | PCWSTR Description; | 
|  | PCWSTR InstallClient; | 
|  | PCWSTR InstallPackageName; | 
|  | SYSTEMTIME LastUpdateTime; | 
|  | PCWSTR ProductName; | 
|  | PCWSTR ProductVersion; | 
|  | DismRestartType RestartRequired; | 
|  | DismFullyOfflineInstallableType FullyOffline; | 
|  | PCWSTR SupportInformation; | 
|  | DismCustomProperty *CustomProperty; | 
|  | UINT CustomPropertyCount; | 
|  | DismFeature *Feature; | 
|  | UINT FeatureCount; | 
|  | } DismPackageInfo; | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | typedef struct _DismPackageInfoEx : public _DismPackageInfo | 
|  | { | 
|  | #else | 
|  | typedef struct _DismPackageInfoEx | 
|  | { | 
|  | DismPackageInfo; | 
|  | #endif | 
|  | PCWSTR CapabilityId; | 
|  | } DismPackageInfoEx; | 
|  |  | 
|  | typedef struct _DismFeatureInfo | 
|  | { | 
|  | PCWSTR FeatureName; | 
|  | DismPackageFeatureState FeatureState; | 
|  | PCWSTR DisplayName; | 
|  | PCWSTR Description; | 
|  | DismRestartType RestartRequired; | 
|  | DismCustomProperty *CustomProperty; | 
|  | UINT CustomPropertyCount; | 
|  | } DismFeatureInfo; | 
|  |  | 
|  | typedef struct _DismCapabilityInfo | 
|  | { | 
|  | PCWSTR Name; | 
|  | DismPackageFeatureState State; | 
|  | PCWSTR DisplayName; | 
|  | PCWSTR Description; | 
|  | DWORD DownloadSize; | 
|  | DWORD InstallSize; | 
|  | } DismCapabilityInfo; | 
|  |  | 
|  | typedef struct _DismString | 
|  | { | 
|  | PCWSTR Value; | 
|  | } DismString; | 
|  |  | 
|  | typedef DismString DismLanguage; | 
|  |  | 
|  | typedef struct _DismWimCustomizedInfo | 
|  | { | 
|  | UINT Size; | 
|  | UINT DirectoryCount; | 
|  | UINT FileCount; | 
|  | SYSTEMTIME CreatedTime; | 
|  | SYSTEMTIME ModifiedTime; | 
|  | } DismWimCustomizedInfo; | 
|  |  | 
|  | typedef struct _DismImageInfo | 
|  | { | 
|  | DismImageType ImageType; | 
|  | UINT ImageIndex; | 
|  | PCWSTR ImageName; | 
|  | PCWSTR ImageDescription; | 
|  | UINT64 ImageSize; | 
|  | UINT Architecture; | 
|  | PCWSTR ProductName; | 
|  | PCWSTR EditionId; | 
|  | PCWSTR InstallationType; | 
|  | PCWSTR Hal; | 
|  | PCWSTR ProductType; | 
|  | PCWSTR ProductSuite; | 
|  | UINT MajorVersion; | 
|  | UINT MinorVersion; | 
|  | UINT Build; | 
|  | UINT SpBuild; | 
|  | UINT SpLevel; | 
|  | DismImageBootable Bootable; | 
|  | PCWSTR SystemRoot; | 
|  | DismLanguage *Language; | 
|  | UINT LanguageCount; | 
|  | UINT DefaultLanguageIndex; | 
|  | VOID *CustomizedInfo; | 
|  | } DismImageInfo; | 
|  |  | 
|  | typedef struct _DismMountedImageInfo | 
|  | { | 
|  | PCWSTR MountPath; | 
|  | PCWSTR ImageFilePath; | 
|  | UINT ImageIndex; | 
|  | DismMountMode MountMode; | 
|  | DismMountStatus MountStatus; | 
|  | } DismMountedImageInfo; | 
|  |  | 
|  | typedef struct _DismDriverPackage | 
|  | { | 
|  | PCWSTR PublishedName; | 
|  | PCWSTR OriginalFileName; | 
|  | WINBOOL InBox; | 
|  | PCWSTR CatalogFile; | 
|  | PCWSTR ClassName; | 
|  | PCWSTR ClassGuid; | 
|  | PCWSTR ClassDescription; | 
|  | WINBOOL BootCritical; | 
|  | DismDriverSignature DriverSignature; | 
|  | PCWSTR ProviderName; | 
|  | SYSTEMTIME Date; | 
|  | UINT MajorVersion; | 
|  | UINT MinorVersion; | 
|  | UINT Build; | 
|  | UINT Revision; | 
|  | } DismDriverPackage; | 
|  |  | 
|  | typedef struct _DismDriver | 
|  | { | 
|  | PCWSTR ManufacturerName; | 
|  | PCWSTR HardwareDescription; | 
|  | PCWSTR HardwareId; | 
|  | UINT Architecture; | 
|  | PCWSTR ServiceName; | 
|  | PCWSTR CompatibleIds; | 
|  | PCWSTR ExcludeIds; | 
|  | } DismDriver; | 
|  |  | 
|  | #pragma pack(pop) | 
|  |  | 
|  | /* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-functions */ | 
|  |  | 
|  | HRESULT WINAPI DismInitialize (DismLogLevel LogLevel, PCWSTR LogFilePath, PCWSTR ScratchDirectory); | 
|  | HRESULT WINAPI DismShutdown (void); | 
|  | HRESULT WINAPI DismMountImage (PCWSTR ImageFilePath, PCWSTR MountPath, UINT ImageIndex, PCWSTR ImageName, DismImageIdentifier ImageIdentifier, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  | HRESULT WINAPI DismUnmountImage (PCWSTR MountPath, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  | HRESULT WINAPI DismOpenSession (PCWSTR ImagePath, PCWSTR WindowsDirectory, PCWSTR SystemDrive, DismSession *Session); | 
|  | HRESULT WINAPI DismCloseSession (DismSession Session); | 
|  | HRESULT WINAPI DismGetLastErrorMessage (DismString **ErrorMessage); | 
|  | HRESULT WINAPI DismRemountImage (PCWSTR MountPath); | 
|  | HRESULT WINAPI DismCommitImage (DismSession Session, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  | HRESULT WINAPI DismGetImageInfo (PCWSTR ImageFilePath, DismImageInfo **ImageInfo, UINT *Count); | 
|  | HRESULT WINAPI DismGetMountedImageInfo (DismMountedImageInfo **MountedImageInfo, UINT *Count); | 
|  | HRESULT WINAPI DismCleanupMountpoints (void); | 
|  | HRESULT WINAPI DismCheckImageHealth (DismSession Session, WINBOOL ScanImage, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData, DismImageHealthState *ImageHealth); | 
|  | HRESULT WINAPI DismRestoreImageHealth (DismSession Session, PCWSTR *SourcePaths, UINT SourcePathCount, WINBOOL LimitAccess, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  | HRESULT WINAPI DismDelete (VOID *DismStructure); | 
|  | HRESULT WINAPI DismAddPackage (DismSession Session, PCWSTR PackagePath, WINBOOL IgnoreCheck, WINBOOL PreventPending, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  | HRESULT WINAPI DismRemovePackage (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  | HRESULT 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); | 
|  | HRESULT WINAPI DismDisableFeature (DismSession Session, PCWSTR FeatureName, PCWSTR PackageName, WINBOOL RemovePayload, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  | HRESULT WINAPI DismGetPackages (DismSession Session, DismPackage **Package, UINT *Count); | 
|  | HRESULT WINAPI DismGetPackageInfo (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismPackageInfo **PackageInfo); | 
|  | HRESULT WINAPI DismGetPackageInfoEx (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismPackageInfoEx **PackageInfoEx); | 
|  | HRESULT WINAPI DismGetFeatures (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeature **Feature, UINT *Count); | 
|  | HRESULT WINAPI DismGetFeatureInfo (DismSession Session, PCWSTR FeatureName, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeatureInfo **FeatureInfo); | 
|  | HRESULT WINAPI DismGetFeatureParent (DismSession Session, PCWSTR FeatureName, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeature **Feature, UINT *Count); | 
|  | HRESULT WINAPI DismApplyUnattend (DismSession Session, PCWSTR UnattendFile, WINBOOL SingleSession); | 
|  | HRESULT WINAPI DismAddDriver (DismSession Session, PCWSTR DriverPath, WINBOOL ForceUnsigned); | 
|  | HRESULT WINAPI DismRemoveDriver (DismSession Session, PCWSTR DriverPath); | 
|  | HRESULT WINAPI DismGetDrivers (DismSession Session, WINBOOL AllDrivers, DismDriverPackage **DriverPackage, UINT *Count); | 
|  | HRESULT WINAPI DismGetDriverInfo (DismSession Session, PCWSTR DriverPath, DismDriver **Driver, UINT *Count, DismDriverPackage **DriverPackage); | 
|  | HRESULT WINAPI DismGetCapabilities (DismSession Session, DismCapability **Capability, UINT *Count); | 
|  | HRESULT WINAPI DismGetCapabilityInfo (DismSession Session, PCWSTR Name, DismCapabilityInfo **Info); | 
|  | HRESULT WINAPI DismAddCapability (DismSession Session, PCWSTR Name, WINBOOL LimitAccess, PCWSTR *SourcePaths, UINT SourcePathCount, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  | HRESULT WINAPI DismRemoveCapability (DismSession Session, PCWSTR Name, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData); | 
|  |  | 
|  | #define DISMAPI_S_RELOAD_IMAGE_SESSION_REQUIRED 0x00000001 | 
|  | #define DISMAPI_E_DISMAPI_NOT_INITIALIZED 0xc0040001 | 
|  | #define DISMAPI_E_SHUTDOWN_IN_PROGRESS 0xc0040002 | 
|  | #define DISMAPI_E_OPEN_SESSION_HANDLES 0xc0040003 | 
|  | #define DISMAPI_E_INVALID_DISM_SESSION 0xc0040004 | 
|  | #define DISMAPI_E_INVALID_IMAGE_INDEX 0xc0040005 | 
|  | #define DISMAPI_E_INVALID_IMAGE_NAME 0xc0040006 | 
|  | #define DISMAPI_E_UNABLE_TO_UNMOUNT_IMAGE_PATH 0xc0040007 | 
|  | #define DISMAPI_E_LOGGING_DISABLED 0xc0040009 | 
|  | #define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_UNMOUNT_IMAGE_PATH 0xc004000a | 
|  | #define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_MOUNT_IMAGE_PATH 0xc004000b | 
|  | #define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_REMOUNT_IMAGE_PATH 0xc004000c | 
|  | #define DISMAPI_E_PARENT_FEATURE_DISABLED 0xc004000d | 
|  | #define DISMAPI_E_MUST_SPECIFY_ONLINE_IMAGE 0xc004000e | 
|  | #define DISMAPI_E_INVALID_PRODUCT_KEY 0xc004000f | 
|  | #define DISMAPI_E_NEEDS_REMOUNT 0xc1510114 | 
|  | #define DISMAPI_E_UNKNOWN_FEATURE 0x800f080c | 
|  | #define DISMAPI_E_BUSY 0x800f0902 | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif /* WINAPI_PARTITION_DESKTOP */ | 
|  |  | 
|  | #endif /* _DISMAPI_H_ */ |