| /** |
| * 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_ */ |