zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

dismapi.h (12691B) - Raw


      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 
      7 #ifndef _DISMAPI_H_
      8 #define _DISMAPI_H_
      9 
     10 #include <winapifamily.h>
     11 
     12 #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
     13 
     14 #ifdef __cplusplus
     15 extern "C"
     16 {
     17 #endif
     18 
     19 typedef UINT DismSession;
     20 
     21 typedef void(CALLBACK *DISM_PROGRESS_CALLBACK)(UINT Current, UINT Total, PVOID UserData);
     22 
     23 #define DISM_ONLINE_IMAGE L"DISM_{53BFAE52-B167-4E2F-A258-0A37B57FF845}"
     24 
     25 #define DISM_SESSION_DEFAULT 0
     26 
     27 #define DISM_MOUNT_READWRITE 0x00000000
     28 #define DISM_MOUNT_READONLY 0x00000001
     29 #define DISM_MOUNT_OPTIMIZE 0x00000002
     30 #define DISM_MOUNT_CHECK_INTEGRITY 0x00000004
     31 
     32 #define DISM_COMMIT_IMAGE 0x00000000
     33 #define DISM_DISCARD_IMAGE 0x00000001
     34 
     35 #define DISM_COMMIT_GENERATE_INTEGRITY 0x00010000
     36 #define DISM_COMMIT_APPEND 0x00020000
     37 #define DISM_COMMIT_MASK 0xffff0000
     38 
     39 /* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-enumerations */
     40 
     41 typedef enum _DismLogLevel
     42 {
     43     DismLogErrors = 0,
     44     DismLogErrorsWarnings,
     45     DismLogErrorsWarningsInfo
     46 } DismLogLevel;
     47 
     48 typedef enum _DismImageIdentifier
     49 {
     50     DismImageIndex = 0,
     51     DismImageName
     52 } DismImageIdentifier;
     53 
     54 typedef enum _DismMountMode
     55 {
     56     DismReadWrite = 0,
     57     DismReadOnly
     58 } DismMountMode;
     59 
     60 typedef enum _DismImageType
     61 {
     62     DismImageTypeUnsupported = -1,
     63     DismImageTypeWim = 0,
     64     DismImageTypeVhd = 1
     65 } DismImageType;
     66 
     67 typedef enum _DismImageBootable
     68 {
     69     DismImageBootableYes = 0,
     70     DismImageBootableNo,
     71     DismImageBootableUnknown
     72 } DismImageBootable;
     73 
     74 typedef enum _DismMountStatus
     75 {
     76     DismMountStatusOk = 0,
     77     DismMountStatusNeedsRemount,
     78     DismMountStatusInvalid
     79 } DismMountStatus;
     80 
     81 typedef enum _DismImageHealthState
     82 {
     83     DismImageHealthy = 0,
     84     DismImageRepairable,
     85     DismImageNonRepairable
     86 } DismImageHealthState;
     87 
     88 typedef enum _DismPackageIdentifier
     89 {
     90     DismPackageNone = 0,
     91     DismPackageName,
     92     DismPackagePath
     93 } DismPackageIdentifier;
     94 
     95 typedef enum _DismPackageFeatureState
     96 {
     97     DismStateNotPresent = 0,
     98     DismStateUninstallPending,
     99     DismStateStaged,
    100     DismStateResolved,
    101     DismStateRemoved = DismStateResolved,
    102     DismStateInstalled,
    103     DismStateInstallPending,
    104     DismStateSuperseded,
    105     DismStatePartiallyInstalled
    106 } DismPackageFeatureState;
    107 
    108 typedef enum _DismReleaseType
    109 {
    110     DismReleaseTypeCriticalUpdate = 0,
    111     DismReleaseTypeDriver,
    112     DismReleaseTypeFeaturePack,
    113     DismReleaseTypeHotfix,
    114     DismReleaseTypeSecurityUpdate,
    115     DismReleaseTypeSoftwareUpdate,
    116     DismReleaseTypeUpdate,
    117     DismReleaseTypeUpdateRollup,
    118     DismReleaseTypeLanguagePack,
    119     DismReleaseTypeFoundation,
    120     DismReleaseTypeServicePack,
    121     DismReleaseTypeProduct,
    122     DismReleaseTypeLocalPack,
    123     DismReleaseTypeOther,
    124     DismReleaseTypeOnDemandPack
    125 } DismReleaseType;
    126 
    127 typedef enum _DismRestartType
    128 {
    129     DismRestartNo = 0,
    130     DismRestartPossible,
    131     DismRestartRequired
    132 } DismRestartType;
    133 
    134 typedef enum _DismDriverSignature
    135 {
    136     DismDriverSignatureUnknown = 0,
    137     DismDriverSignatureUnsigned = 1,
    138     DismDriverSignatureSigned = 2
    139 } DismDriverSignature;
    140 
    141 typedef enum _DismFullyOfflineInstallableType
    142 {
    143     DismFullyOfflineInstallable = 0,
    144     DismFullyOfflineNotInstallable,
    145     DismFullyOfflineInstallableUndetermined
    146 } DismFullyOfflineInstallableType;
    147 
    148 /* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-structures */
    149 
    150 #pragma pack(push, 1)
    151 
    152 typedef struct _DismPackage
    153 {
    154     PCWSTR PackageName;
    155     DismPackageFeatureState PackageState;
    156     DismReleaseType ReleaseType;
    157     SYSTEMTIME InstallTime;
    158 } DismPackage;
    159 
    160 typedef struct _DismCustomProperty
    161 {
    162     PCWSTR Name;
    163     PCWSTR Value;
    164     PCWSTR Path;
    165 } DismCustomProperty;
    166 
    167 typedef struct _DismFeature
    168 {
    169     PCWSTR FeatureName;
    170     DismPackageFeatureState State;
    171 } DismFeature;
    172 
    173 typedef struct _DismCapability
    174 {
    175     PCWSTR Name;
    176     DismPackageFeatureState State;
    177 } DismCapability;
    178 
    179 typedef struct _DismPackageInfo
    180 {
    181     PCWSTR PackageName;
    182     DismPackageFeatureState PackageState;
    183     DismReleaseType ReleaseType;
    184     SYSTEMTIME InstallTime;
    185     WINBOOL Applicable;
    186     PCWSTR Copyright;
    187     PCWSTR Company;
    188     SYSTEMTIME CreationTime;
    189     PCWSTR DisplayName;
    190     PCWSTR Description;
    191     PCWSTR InstallClient;
    192     PCWSTR InstallPackageName;
    193     SYSTEMTIME LastUpdateTime;
    194     PCWSTR ProductName;
    195     PCWSTR ProductVersion;
    196     DismRestartType RestartRequired;
    197     DismFullyOfflineInstallableType FullyOffline;
    198     PCWSTR SupportInformation;
    199     DismCustomProperty *CustomProperty;
    200     UINT CustomPropertyCount;
    201     DismFeature *Feature;
    202     UINT FeatureCount;
    203 } DismPackageInfo;
    204 
    205 #ifdef __cplusplus
    206 typedef struct _DismPackageInfoEx : public _DismPackageInfo
    207 {
    208 #else
    209 typedef struct _DismPackageInfoEx
    210 {
    211     DismPackageInfo;
    212 #endif
    213     PCWSTR CapabilityId;
    214 } DismPackageInfoEx;
    215 
    216 typedef struct _DismFeatureInfo
    217 {
    218     PCWSTR FeatureName;
    219     DismPackageFeatureState FeatureState;
    220     PCWSTR DisplayName;
    221     PCWSTR Description;
    222     DismRestartType RestartRequired;
    223     DismCustomProperty *CustomProperty;
    224     UINT CustomPropertyCount;
    225 } DismFeatureInfo;
    226 
    227 typedef struct _DismCapabilityInfo
    228 {
    229     PCWSTR Name;
    230     DismPackageFeatureState State;
    231     PCWSTR DisplayName;
    232     PCWSTR Description;
    233     DWORD DownloadSize;
    234     DWORD InstallSize;
    235 } DismCapabilityInfo;
    236 
    237 typedef struct _DismString
    238 {
    239     PCWSTR Value;
    240 } DismString;
    241 
    242 typedef DismString DismLanguage;
    243 
    244 typedef struct _DismWimCustomizedInfo
    245 {
    246     UINT Size;
    247     UINT DirectoryCount;
    248     UINT FileCount;
    249     SYSTEMTIME CreatedTime;
    250     SYSTEMTIME ModifiedTime;
    251 } DismWimCustomizedInfo;
    252 
    253 typedef struct _DismImageInfo
    254 {
    255     DismImageType ImageType;
    256     UINT ImageIndex;
    257     PCWSTR ImageName;
    258     PCWSTR ImageDescription;
    259     UINT64 ImageSize;
    260     UINT Architecture;
    261     PCWSTR ProductName;
    262     PCWSTR EditionId;
    263     PCWSTR InstallationType;
    264     PCWSTR Hal;
    265     PCWSTR ProductType;
    266     PCWSTR ProductSuite;
    267     UINT MajorVersion;
    268     UINT MinorVersion;
    269     UINT Build;
    270     UINT SpBuild;
    271     UINT SpLevel;
    272     DismImageBootable Bootable;
    273     PCWSTR SystemRoot;
    274     DismLanguage *Language;
    275     UINT LanguageCount;
    276     UINT DefaultLanguageIndex;
    277     VOID *CustomizedInfo;
    278 } DismImageInfo;
    279 
    280 typedef struct _DismMountedImageInfo
    281 {
    282     PCWSTR MountPath;
    283     PCWSTR ImageFilePath;
    284     UINT ImageIndex;
    285     DismMountMode MountMode;
    286     DismMountStatus MountStatus;
    287 } DismMountedImageInfo;
    288 
    289 typedef struct _DismDriverPackage
    290 {
    291     PCWSTR PublishedName;
    292     PCWSTR OriginalFileName;
    293     WINBOOL InBox;
    294     PCWSTR CatalogFile;
    295     PCWSTR ClassName;
    296     PCWSTR ClassGuid;
    297     PCWSTR ClassDescription;
    298     WINBOOL BootCritical;
    299     DismDriverSignature DriverSignature;
    300     PCWSTR ProviderName;
    301     SYSTEMTIME Date;
    302     UINT MajorVersion;
    303     UINT MinorVersion;
    304     UINT Build;
    305     UINT Revision;
    306 } DismDriverPackage;
    307 
    308 typedef struct _DismDriver
    309 {
    310     PCWSTR ManufacturerName;
    311     PCWSTR HardwareDescription;
    312     PCWSTR HardwareId;
    313     UINT Architecture;
    314     PCWSTR ServiceName;
    315     PCWSTR CompatibleIds;
    316     PCWSTR ExcludeIds;
    317 } DismDriver;
    318 
    319 #pragma pack(pop)
    320 
    321 /* https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism/dism-api-functions */
    322 
    323 HRESULT WINAPI DismInitialize (DismLogLevel LogLevel, PCWSTR LogFilePath, PCWSTR ScratchDirectory);
    324 HRESULT WINAPI DismShutdown (void);
    325 HRESULT WINAPI DismMountImage (PCWSTR ImageFilePath, PCWSTR MountPath, UINT ImageIndex, PCWSTR ImageName, DismImageIdentifier ImageIdentifier, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    326 HRESULT WINAPI DismUnmountImage (PCWSTR MountPath, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    327 HRESULT WINAPI DismOpenSession (PCWSTR ImagePath, PCWSTR WindowsDirectory, PCWSTR SystemDrive, DismSession *Session);
    328 HRESULT WINAPI DismCloseSession (DismSession Session);
    329 HRESULT WINAPI DismGetLastErrorMessage (DismString **ErrorMessage);
    330 HRESULT WINAPI DismRemountImage (PCWSTR MountPath);
    331 HRESULT WINAPI DismCommitImage (DismSession Session, DWORD Flags, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    332 HRESULT WINAPI DismGetImageInfo (PCWSTR ImageFilePath, DismImageInfo **ImageInfo, UINT *Count);
    333 HRESULT WINAPI DismGetMountedImageInfo (DismMountedImageInfo **MountedImageInfo, UINT *Count);
    334 HRESULT WINAPI DismCleanupMountpoints (void);
    335 HRESULT WINAPI DismCheckImageHealth (DismSession Session, WINBOOL ScanImage, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData, DismImageHealthState *ImageHealth);
    336 HRESULT WINAPI DismRestoreImageHealth (DismSession Session, PCWSTR *SourcePaths, UINT SourcePathCount, WINBOOL LimitAccess, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    337 HRESULT WINAPI DismDelete (VOID *DismStructure);
    338 HRESULT WINAPI DismAddPackage (DismSession Session, PCWSTR PackagePath, WINBOOL IgnoreCheck, WINBOOL PreventPending, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    339 HRESULT WINAPI DismRemovePackage (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    340 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);
    341 HRESULT WINAPI DismDisableFeature (DismSession Session, PCWSTR FeatureName, PCWSTR PackageName, WINBOOL RemovePayload, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    342 HRESULT WINAPI DismGetPackages (DismSession Session, DismPackage **Package, UINT *Count);
    343 HRESULT WINAPI DismGetPackageInfo (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismPackageInfo **PackageInfo);
    344 HRESULT WINAPI DismGetPackageInfoEx (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismPackageInfoEx **PackageInfoEx);
    345 HRESULT WINAPI DismGetFeatures (DismSession Session, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeature **Feature, UINT *Count);
    346 HRESULT WINAPI DismGetFeatureInfo (DismSession Session, PCWSTR FeatureName, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeatureInfo **FeatureInfo);
    347 HRESULT WINAPI DismGetFeatureParent (DismSession Session, PCWSTR FeatureName, PCWSTR Identifier, DismPackageIdentifier PackageIdentifier, DismFeature **Feature, UINT *Count);
    348 HRESULT WINAPI DismApplyUnattend (DismSession Session, PCWSTR UnattendFile, WINBOOL SingleSession);
    349 HRESULT WINAPI DismAddDriver (DismSession Session, PCWSTR DriverPath, WINBOOL ForceUnsigned);
    350 HRESULT WINAPI DismRemoveDriver (DismSession Session, PCWSTR DriverPath);
    351 HRESULT WINAPI DismGetDrivers (DismSession Session, WINBOOL AllDrivers, DismDriverPackage **DriverPackage, UINT *Count);
    352 HRESULT WINAPI DismGetDriverInfo (DismSession Session, PCWSTR DriverPath, DismDriver **Driver, UINT *Count, DismDriverPackage **DriverPackage);
    353 HRESULT WINAPI DismGetCapabilities (DismSession Session, DismCapability **Capability, UINT *Count);
    354 HRESULT WINAPI DismGetCapabilityInfo (DismSession Session, PCWSTR Name, DismCapabilityInfo **Info);
    355 HRESULT WINAPI DismAddCapability (DismSession Session, PCWSTR Name, WINBOOL LimitAccess, PCWSTR *SourcePaths, UINT SourcePathCount, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    356 HRESULT WINAPI DismRemoveCapability (DismSession Session, PCWSTR Name, HANDLE CancelEvent, DISM_PROGRESS_CALLBACK Progress, PVOID UserData);
    357 
    358 #define DISMAPI_S_RELOAD_IMAGE_SESSION_REQUIRED 0x00000001
    359 #define DISMAPI_E_DISMAPI_NOT_INITIALIZED 0xc0040001
    360 #define DISMAPI_E_SHUTDOWN_IN_PROGRESS 0xc0040002
    361 #define DISMAPI_E_OPEN_SESSION_HANDLES 0xc0040003
    362 #define DISMAPI_E_INVALID_DISM_SESSION 0xc0040004
    363 #define DISMAPI_E_INVALID_IMAGE_INDEX 0xc0040005
    364 #define DISMAPI_E_INVALID_IMAGE_NAME 0xc0040006
    365 #define DISMAPI_E_UNABLE_TO_UNMOUNT_IMAGE_PATH 0xc0040007
    366 #define DISMAPI_E_LOGGING_DISABLED 0xc0040009
    367 #define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_UNMOUNT_IMAGE_PATH 0xc004000a
    368 #define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_MOUNT_IMAGE_PATH 0xc004000b
    369 #define DISMAPI_E_OPEN_HANDLES_UNABLE_TO_REMOUNT_IMAGE_PATH 0xc004000c
    370 #define DISMAPI_E_PARENT_FEATURE_DISABLED 0xc004000d
    371 #define DISMAPI_E_MUST_SPECIFY_ONLINE_IMAGE 0xc004000e
    372 #define DISMAPI_E_INVALID_PRODUCT_KEY 0xc004000f
    373 #define DISMAPI_E_NEEDS_REMOUNT 0xc1510114
    374 #define DISMAPI_E_UNKNOWN_FEATURE 0x800f080c
    375 #define DISMAPI_E_BUSY 0x800f0902
    376 
    377 #ifdef __cplusplus
    378 }
    379 #endif
    380 
    381 #endif /* WINAPI_PARTITION_DESKTOP */
    382 
    383 #endif /* _DISMAPI_H_ */