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