headers: Add dismapi.h file.
Signed-off-by: Biswapriyo Nath <nathbappai@gmail.com>
Signed-off-by: Liu Hao <lh_mouse@126.com>
diff --git a/mingw-w64-headers/include/dismapi.h b/mingw-w64-headers/include/dismapi.h
new file mode 100644
index 0000000..dcbee00
--- /dev/null
+++ b/mingw-w64-headers/include/dismapi.h
@@ -0,0 +1,383 @@
+/**
+ * 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_ */