blob: dcbee007c16bad2d3aefa67543a1147f331a3ec5 [file] [log] [blame]
/**
* 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_ */