Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Brauchen Sie, um die Header-Datei für Delphi WIMGAPI zu aktualisieren! (https://www.delphipraxis.net/178118-brauchen-sie-um-die-header-datei-fuer-delphi-wimgapi-zu-aktualisieren.html)

SlpLow 18. Dez 2013 13:30


Brauchen Sie, um die Header-Datei für Delphi WIMGAPI zu aktualisieren!
 
Liste der Anhänge anzeigen (Anzahl: 1)
I compared the headers vimgapi.h windows 8, windows 7 and put changes with comments. Need professional (new author) edition for updating of the header file from Serbia.

Delphi-Quellcode:
unit WIMGAPI;

interface

uses Windows;

const

  // WIMCreateFile:
  //
  WIM_GENERIC_READ         = GENERIC_READ;
  WIM_GENERIC_WRITE         = GENERIC_WRITE;
  WIM_GENERIC_MOUNT         = GENERIC_EXECUTE;
  WIM_CREATE_NEW         = CREATE_NEW;
  WIM_CREATE_ALWAYS         = CREATE_ALWAYS;
  WIM_OPEN_EXISTING         = OPEN_EXISTING;
  WIM_OPEN_ALWAYS         = OPEN_ALWAYS;

  WIM_COMPRESS_NONE         = 0;
  WIM_COMPRESS_XPRESS         = 1;
  WIM_COMPRESS_LZX         = 2;
  WIM_COMPRESS_LZMS         = 3; // New Windows 8

  WIM_CREATED_NEW         = 0;
  WIM_OPENED_EXISTING         = 1;

  // WIMCreateFile, WIMCaptureImage, WIMApplyImage, WIMMountImageHandle flags:
  //
  WIM_FLAG_RESERVED         = $00000001;
  WIM_FLAG_VERIFY         = $00000002;
  WIM_FLAG_INDEX         = $00000004;
  WIM_FLAG_NO_APPLY         = $00000008;
  WIM_FLAG_NO_DIRACL         = $00000010;
  WIM_FLAG_NO_FILEACL         = $00000020;
  WIM_FLAG_SHARE_WRITE         = $00000040;
  WIM_FLAG_FILEINFO         = $00000080;
  WIM_FLAG_NO_RP_FIX         = $00000100;
  WIM_FLAG_MOUNT_READONLY      = $00000200;
  WIM_FLAG_MOUNT_FAST         = $00000400; // New Windows 8
  WIM_FLAG_MOUNT_LEGACY         = $00000800; // New Windows 8

  // WIMGetMountedImageList flags
  //
  WIM_MOUNT_FLAG_MOUNTED      = $00000001;
  WIM_MOUNT_FLAG_MOUNTING      = $00000002;
  WIM_MOUNT_FLAG_REMOUNTABLE      = $00000004;
  WIM_MOUNT_FLAG_INVALID      = $00000008;
  WIM_MOUNT_FLAG_NO_WIM         = $00000010;
  WIM_MOUNT_FLAG_NO_MOUNTDIR      = $00000020;
  WIM_MOUNT_FLAG_MOUNTDIR_REPLACED   = $00000040;
  WIM_MOUNT_FLAG_READWRITE      = $00000100;

  // WIMCommitImageHandle flags
  //
  WIM_COMMIT_FLAG_APPEND      = $00000001;

  // WIMSetReferenceFile
  //
  WIM_REFERENCE_APPEND         = $00010000;
  WIM_REFERENCE_REPLACE         = $00020000;

  // WIMExportImage
  //
  WIM_EXPORT_ALLOW_DUPLICATES      = $00000001;
  WIM_EXPORT_ONLY_RESOURCES      = $00000002;
  WIM_EXPORT_ONLY_METADATA      = $00000004;
  WIM_EXPORT_VERIFY_SOURCE      = $00000008; // New Windows 8
  WIM_EXPORT_VERIFY_DESTINATION      = $00000010; // New Windows 8

  // WIMRegisterMessageCallback:
  //
  INVALID_CALLBACK_VALUE      = $FFFFFFFF;

  // WIMCopyFile
  //
  WIM_COPY_FILE_RETRY         = $01000000;

  // WIMDeleteImageMounts
  //
  WIM_DELETE_MOUNTS_ALL         = $00000001;

  // WIMRegisterLogfile - New Windows 8
  // 
  WIM_LOGFILE_UTF8         = $00000001; // New Windows 8

  // WIMMessageCallback Notifications:
  //
  WM_APP            = $8000;    // uses Messages
  WIM_MSG            = WM_APP + $1476;
  WIM_MSG_TEXT            = WIM_MSG + 1;
  WIM_MSG_PROGRESS         = WIM_MSG + 2;
  WIM_MSG_PROCESS         = WIM_MSG + 3;
  WIM_MSG_SCANNING         = WIM_MSG + 4;
  WIM_MSG_SETRANGE         = WIM_MSG + 5;
  WIM_MSG_SETPOS         = WIM_MSG + 6;
  WIM_MSG_STEPIT         = WIM_MSG + 7;
  WIM_MSG_COMPRESS         = WIM_MSG + 8;
  WIM_MSG_ERROR            = WIM_MSG + 9;
  WIM_MSG_ALIGNMENT         = WIM_MSG + 10;
  WIM_MSG_RETRY            = WIM_MSG + 11;
  WIM_MSG_SPLIT            = WIM_MSG + 12;
  WIM_MSG_FILEINFO         = WIM_MSG + 13;
  WIM_MSG_INFO            = WIM_MSG + 14;
  WIM_MSG_WARNING_OBJECTID      = WIM_MSG + 15;
  WIM_MSG_CHK_PROCESS         = WIM_MSG + 16;
  WIM_MSG_STALE_MOUNT_DIR      = WIM_MSG + 17;
  WIM_MSG_STALE_MOUNT_FILE      = WIM_MSG + 18;
  WIM_MSG_MOUNT_CLEANUP_PROGRESS   = WIM_MSG + 19;
  WIM_MSG_CLEANUP_SCANNING_DRIVE   = WIM_MSG + 20;
  WIM_MSG_IMAGE_ALREADY_MOUNTED      = WIM_MSG + 21;
  WIM_MSG_CLEANUP_UNMOUNTING_IMAGE   = WIM_MSG + 22;
  WIM_MSG_QUERY_ABORT         = WIM_MSG + 23;
  WIM_MSG_IO_RANGE_START_REQUEST_LOOP   = WIM_MSG + 24; // New Windows 8
  WIM_MSG_IO_RANGE_END_REQUEST_LOOP   = WIM_MSG + 25; // New Windows 8
  WIM_MSG_IO_RANGE_REQUEST      = WIM_MSG + 26; // New Windows 8
  WIM_MSG_IO_RANGE_RELEASE      = WIM_MSG + 27; // New Windows 8
  WIM_MSG_VERIFY_PROGRESS      = WIM_MSG + 28; // New Windows 8
  WIM_MSG_COPY_BUFFER         = WIM_MSG + 29; // New Windows 8
  WIM_MSG_METADATA_EXCLUDE      = WIM_MSG + 30; // New Windows 8
  WIM_MSG_GET_APPLY_ROOT      = WIM_MSG + 31; // New Windows 8
  WIM_MSG_MDPAD            = WIM_MSG + 32; // New Windows 8
  WIM_MSG_STEPNAME         = WIM_MSG + 33; // New Windows 8

  // WIMMessageCallback Return codes:
  //
  WIM_MSG_SUCCESS         = ERROR_SUCCESS;
  WIM_MSG_DONE            = $FFFFFFF0;
  WIM_MSG_SKIP_ERROR         = $FFFFFFFE;
  WIM_MSG_ABORT_IMAGE         = $FFFFFFFF;

  // WIM_INFO dwFlags values:
  //
  WIM_ATTRIBUTE_NORMAL         = $00000000;
  WIM_ATTRIBUTE_RESOURCE_ONLY      = $00000001;
  WIM_ATTRIBUTE_METADATA_ONLY      = $00000002;
  WIM_ATTRIBUTE_VERIFY_DATA      = $00000004;
  WIM_ATTRIBUTE_RP_FIX         = $00000008;
  WIM_ATTRIBUTE_SPANNED         = $00000010;
  WIM_ATTRIBUTE_READONLY      = $00000020;

  // Define enumeration for WIMGetMountedImageInfo to determine structure to use...
  //
  MountedImageInfoLevel0      = 1;
  MountedImageInfoLevel1      = 2;
  MountedImageInfoLevelInvalid      = 3;


type
  PLARGE_INTEGER = ^LARGE_INTEGER;

  // The WIM_INFO structure used by WIMGetAttributes:
  //
  _WIM_INFO = packed record
    WimPath: array [0 .. MAX_PATH - 1] of WideChar;
    Guid: TGUID;
    ImageCount: DWORD;
    CompressionType: DWORD;
    PartNumber: WORD;
    TotalParts: WORD;
    BootIndex: DWORD;
    WimAttributes: DWORD;
    WimFlagsAndAttr: DWORD;
  end;

  WIM_INFO = _WIM_INFO;
  LPWIM_INFO = ^WIM_INFO;
  PWIM_INFO = ^WIM_INFO;

  // The WIM_MOUNT_LIST structure used for getting the list of mounted images.
  //
  _WIM_MOUNT_LIST = packed record
    WimPath: array [0 .. MAX_PATH - 1] of WideChar;
    MountPath: array [0 .. MAX_PATH - 1] of WideChar;
    ImageIndex: DWORD;
    MountedForRW: BOOL;
  end;

  WIM_MOUNT_LIST = _WIM_MOUNT_LIST;
  LPWIM_MOUNT_LIST = ^WIM_MOUNT_LIST;
  PWIM_MOUNT_LIST = ^WIM_MOUNT_LIST;
  WIM_MOUNT_INFO_LEVEL0 = _WIM_MOUNT_LIST;
  PWIM_MOUNT_INFO_LEVEL0 = ^WIM_MOUNT_LIST;
  LPWIM_MOUNT_INFO_LEVEL0 = ^WIM_MOUNT_LIST;

  // Define new WIM_MOUNT_INFO_LEVEL1 structure with additional data...
  //
  _WIM_MOUNT_INFO_LEVEL1 = packed record
    WimPath: array [0 .. MAX_PATH - 1] of WideChar;
    MountPath: array [0 .. MAX_PATH - 1] of WideChar;
    ImageIndex: DWORD;
    MountFlags: DWORD;
  end;

  WIM_MOUNT_INFO_LEVEL1 = _WIM_MOUNT_INFO_LEVEL1;
  PWIM_MOUNT_INFO_LEVEL1 = ^WIM_MOUNT_INFO_LEVEL1;
  LPWIM_MOUNT_INFO_LEVEL1 = ^WIM_MOUNT_INFO_LEVEL1;
  _MOUNTED_IMAGE_INFO_LEVELS = DWORD;
  MOUNTED_IMAGE_INFO_LEVELS = _MOUNTED_IMAGE_INFO_LEVELS;

  //===========================================================================
  // New structure in Windows 8 WIMGAPI wimgapi.h
  //===========================================================================
  //
  // An abstract type implemented by the caller when using File I/O callbacks.
  //
  typedef VOID * PFILEIOCALLBACK_SESSION; // this is probably = PFILEIOCALLBACK_SESSION = Pointer; str №448 (my note)
  //
  // The WIM_IO_RANGE_CALLBACK structure is used in conjunction with the
  // FileIOCallbackReadFile callback and the WIM_MSG_IO_RANGE_REQUEST and
  // WIM_MSG_IO_RANGE_RELEASE message callbacks. A pointer to a
  // WIM_IO_RANGE_REQUEST is passed in WPARAM to the callback for both messages.
  //
  typedef struct _WIM_IO_RANGE_CALLBACK
  {
    //
    // The callback session that corresponds to the file that is being queried.
    //
    PFILEIOCALLBACK_SESSION pSession;

    // Filled in by WIMGAPI for both messages:
    LARGE_INTEGER Offset, Size;

    // Filled in by the callback for WIM_MSG_IO_RANGE_REQUEST (set to TRUE to
    // indicate data in the specified range is available, and FALSE to indicate
    // it is not yet available):
    BOOL Available;
  } WIM_IO_RANGE_CALLBACK, *PWIM_IO_RANGE_CALLBACK;

  //
  // Abstract (opaque) type for WIM files used with
  // WIMEnumImageFiles API
  //
  typedef VOID * PWIM_ENUM_FILE;

  #if defined(__cplusplus)
  typedef struct _WIM_FILE_FIND_DATA : public _WIN32_FIND_DATAW
  {
  #else
  typedef struct _WIM_FILE_FIND_DATA
  {
    WIN32_FIND_DATAW;
  #endif

    BYTE bHash[20];
    PSECURITY_DESCRIPTOR pSecurityDescriptor;
    PWSTR *ppszAlternateStreamNames;
    PBYTE pbReparseData;
    DWORD cbReparseData;
} WIM_FIND_DATA, *PWIM_FIND_DATA;
  //===========================================================================


  //
  // Exported Function Prototypes:
  //
type
  TWIMCreateFile = function(pzWimPath: PWideChar;
    dwDesiredAccess, dwCreationDisposition, dwFlagsAndAttributes,
    dwCompressionType: DWORD; pdwCreationResult: PDWORD): THandle; stdcall;

  TWIMCloseHandle = function(hObject: THandle): BOOL; stdcall;

  TWIMSetTemporaryPath = function(hWim: THandle; pszPath: PWideChar)
    : BOOL; stdcall;

  TWIMSetReferenceFile = function(hWim: THandle; pszPath: PWideChar;
    dwFlags: DWORD): BOOL; stdcall;

  TWIMSplitFile = function(hWim: THandle; pszPartPath: PWideChar;
    pliPartSize: PLARGE_INTEGER; dwFlags: DWORD): BOOL; stdcall;

  TWIMExportImage = function(hImage, hWim: THandle; dwFlags: DWORD)
    : BOOL; stdcall;

  TWIMDeleteImage = function(hWim: THandle; dwImageIndex: DWORD): BOOL; stdcall;

  TWIMGetImageCount = function(hWim: THandle): DWORD; stdcall;

  TWIMGetAttributes = function(hWim: THandle; pWimInfo: PWIM_INFO; // in Windows 7 cbWimInfo = out_bcount(cbWimInfo) PWIM_INFO pWimInfo
    cbWimInfo: DWORD): BOOL; stdcall;                             // in Windows 8 cbWimInfo = out_writes_bytes_(cbWimInfo) PWIM_INFO pWimInfo

  TWIMSetBootImage = function(hWim: THandle; dwImageIndex: DWORD)
    : BOOL; stdcall;

  TWIMCaptureImage = function(hWim: THandle; pszPath: PWideChar;
    dwCaptureFlags: DWORD): THandle; stdcall;

  TWIMLoadImage = function(hWim: THandle; dwImageIndex: DWORD)
    : THandle; stdcall;

  TWIMApplyImage = function(hImage: THandle; pszPath: PWideChar;
    dwApplyFlags: DWORD): BOOL; stdcall;

  TWIMGetImageInformation = function(hImage: THandle; ppvImageInfo: Pointer; // in Windows 7 ppvImageInfo = out PVOID *ppvImageInfo
    pcbImageInfo: PDWORD): BOOL; stdcall;                                   // in Windows 8 ppvImageInfo = typefix(PWSTR*) __deref_out_ecount_z(*pcbImageInfo/2) PVOID *ppvImageInfo

  TWIMSetImageInformation = function(hImage: THandle; pvImageInfo: Pointer; // in Windows 7 pvImageInfo = in_bcount(cbImageInfo) PVOID pvImageInfo
    cbImageInfo: DWORD): BOOL; stdcall;                                     // in Windows 8 pvImageInfo = in_reads_bytes_(cbImageInfo) PVOID pvImageInfo

  TWIMGetMessageCallbackCount = function(hWim: THandle): DWORD; stdcall;

  TWIMRegisterMessageCallback = function(hWim: THandle;
    fpMessageProc, pvUserData: Pointer): DWORD; stdcall;

  TWIMUnregisterMessageCallback = function(hWim: THandle;
    fpMessageProc: Pointer): BOOL; stdcall;

  TWIMMessageCallback = function(dwMessageId: DWORD; wParam: wParam;
    lParam: lParam; pvUserData: Pointer): DWORD; stdcall;

  TWIMCopyFile = function(pszExistingFileName, pszNewFileName: PWideChar;
    pProgressRoutine, pvData: Pointer; pbCancel: PBOOL; dwCopyFlags: DWORD)
    : BOOL; stdcall;

  TWIMMountImage = function(pszMountPath, pszWimFileName: PWideChar;
    dwImageIndex: DWORD; pszTempPath: PWideChar): BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMMountImageHandle = function(hImage: THandle; pszMountPath: PWideChar;
    dwMountFlags: DWORD): BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMRemountImage = function(pszMountPath: PWideChar; dwMountFlags: DWORD)
    : BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMCommitImageHandle = function(hImage: THandle; dwCommitFlags: DWORD;
    phNewImageHandle: PHandle): BOOL; stdcall;

  TWIMUnmountImage = function(pszMountPath, pszWimFileName: PWideChar;
    dwImageIndex: DWORD; bCommitChanges: BOOL): BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMUnmountImageHandle = function(hImage: THandle; dwUnmountFlags: DWORD)
    : BOOL; stdcall;

  // OBSOLETE since Windows 7 - Replaced by WIMGetMountedImageInfo
  TWIMGetMountedImages = function(pMountList: PWIM_MOUNT_LIST; // in Windows 7 pMountList = out_bcount_opt(*pcbMountList) PWIM_MOUNT_LIST pMountList
    pcbMountListLength: PDWORD): BOOL; stdcall;               // in Windows 8 pMountList = out_writes_bytes_opt_(*pcbMountList) PWIM_MOUNT_LIST pMountList

  // New in Windows 7 WIMGAPI
  TWIMGetMountedImageInfo = function(fInfoLevelId: MOUNTED_IMAGE_INFO_LEVELS; // in Windows 7 pMountInfo = out_bcount_opt(*pcbMountInfo) PVOID pMountInfo
    pdwImageCount: PDWORD; pMountInfo: Pointer; cbMountInfoLength: DWORD;    // in Windows 8 pMountInfo = out_writes_bytes_opt_(cbMountInfoLength) PVOID pMountInfo
    pcbReturnLength: PDWORD): BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMGetMountedImageInfoFromHandle = function(hImage: THandle;   // in Windows 7 pMountInfo = out_bcount_opt(*pcbMountInfo) PVOID pMountInfo
    fInfoLevelId: MOUNTED_IMAGE_INFO_LEVELS; pMountInfo: Pointer; // in Windows 8 pMountInfo = out_writes_bytes_opt_(cbMountInfoLength) PVOID pMountInfo
    cbMountInfoLength: DWORD; pcbReturnLength: PDWORD): BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMGetMountedImageHandle = function(pszMountPath: PWideChar; dwFlags: DWORD;
    phWimHandle, phImageHandle: PHandle): BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMDeleteImageMounts = function(dwDeleteFlags: DWORD): BOOL; stdcall;

  // Neu in Windows 7 WIMGAPI
  TWIMRegisterLogFile = function(pszLogFile: PWideChar; dwFlags: DWORD)
    : BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMUnregisterLogFile = function(pszLogFile: PWideChar): BOOL; stdcall;

  // New in Windows 7 WIMGAPI
  TWIMExtractImagePath = function(hImage: THandle;
    pszImagePath, pszDestinationPath: PWideChar; dwExtractFlags: DWORD)
    : BOOL; stdcall;

  TWIMInitFileIOCallbacks = function(pCallbacks: Pointer): BOOL; stdcall;

  TWIMSetFileIOCallbackTemporaryPath = function(pszPath: PWideChar)
    : BOOL; stdcall;

  //===========================================================================
  // New Function in Windows 8 WIMGAPI wimgapi.h
  //===========================================================================

  //---------------------------------------------------------------------------
  HANDLE
  WINAPI
  WIMFindFirstImageFile(
      _In_ HANDLE           hImage,
      _In_ PCWSTR           pwszFilePath,
      _Out_ PWIM_FIND_DATA  pFindFileData
      );

  //---------------------------------------------------------------------------
  BOOL
  WINAPI
  WIMFindNextImageFile(
      _In_  HANDLE          hFindFile,
      _Out_ PWIM_FIND_DATA  pFindFileData
      );
  //---------------------------------------------------------------------------

  //
  // API for fast enumeration of image files
  //
  typedef
  HRESULT
  (CALLBACK * WIMEnumImageFilesCallback)(
      _In_ PWIM_FIND_DATA    pFindFileData,
      _In_ PWIM_ENUM_FILE    pEnumFile,
      _In_opt_ PVOID         pEnumContext
      );

  //---------------------------------------------------------------------------
  BOOL
  WINAPI
  WIMEnumImageFiles(
      _In_ HANDLE                    hImage,
      _In_opt_ PWIM_ENUM_FILE        pEnumFile,
      _In_ WIMEnumImageFilesCallback fpEnumImageCallback,
      _In_opt_ PVOID                 pEnumContext
      );

  //---------------------------------------------------------------------------
  HANDLE
  WINAPI
  WIMCreateImageFile(
      _In_ HANDLE   hImage,
      _In_ PCWSTR   pwszFilePath,
      _In_ DWORD    dwDesiredAccess,
      _In_ DWORD    dwCreationDisposition,
      _In_ DWORD    dwFlagsAndAttributes
      );

  //---------------------------------------------------------------------------
  BOOL
  WINAPI
  WIMReadImageFile(
      _In_                                            HANDLE       hImgFile,
      _Out_writes_bytes_to_(dwBytesToRead, *pdwBytesRead) PBYTE        pbBuffer,
      _In_                                            DWORD        dwBytesToRead,
      _Out_opt_                                       PDWORD       pdwBytesRead,
      _Inout_                                         LPOVERLAPPED lpOverlapped
      );
  //===========================================================================



  //
  // File I/O callback prototypes
  //
type
  PFILEIOCALLBACK_SESSION = Pointer;

type
  FileIOCallbackOpenFile = function(pszFileName: PWideChar)
    : PFILEIOCALLBACK_SESSION;

  FileIOCallbackCloseFile = function(hFile: PFILEIOCALLBACK_SESSION): BOOL;

  FileIOCallbackReadFile = function(hFile: PFILEIOCALLBACK_SESSION;             // in Windows 7 pOverlapped = in LPOVERLAPPED pOverlapped
    pBuffer: Pointer; nNumberOfBytesToRead: DWORD; pNumberOfBytesRead: LPDWORD; // in Windows 8 pOverlapped = inout_LPOVERLAPPED pOverlapped
    pOverlapped: pOverlapped): BOOL;

  FileIOCallbackSetFilePointer = function(hFile: PFILEIOCALLBACK_SESSION;       // in Windows 7 pNewFilePointer = in PLARGE_INTEGER pNewFilePointer
    liDistanceToMove: LARGE_INTEGER; pNewFilePointer: PLARGE_INTEGER;           // in Windows 8 pNewFilePointer = out_PLARGE_INTEGER pNewFilePointer
    dwMoveMethod: DWORD): BOOL;

  FileIOCallbackGetFileSize = function(hFile: THandle;
    pFileSize: PLARGE_INTEGER): BOOL;

type
  _SFileIOCallbackInfo = packed record
    pfnOpenFile: FileIOCallbackOpenFile;
    pfnCloseFile: FileIOCallbackCloseFile;
    pfnReadFile: FileIOCallbackReadFile;
    pfnSetFilePointer: FileIOCallbackSetFilePointer;
    pfnGetFileSize: FileIOCallbackGetFileSize;
  end;

  SFileIOCallbackInfo = _SFileIOCallbackInfo;

const
  WIMGAPI_LIBNAME = 'wimgapi.dll';

var
  WIMCreateFile: TWIMCreateFile;
  WIMCloseHandle: TWIMCloseHandle;
  WIMSetTemporaryPath: TWIMSetTemporaryPath;
  WIMSetReferenceFile: TWIMSetReferenceFile;
  WIMSplitFile: TWIMSplitFile;
  WIMExportImage: TWIMExportImage;
  WIMDeleteImage: TWIMDeleteImage;
  WIMGetImageCount: TWIMGetImageCount;
  WIMGetAttributes: TWIMGetAttributes;
  WIMSetBootImage: TWIMSetBootImage;
  WIMCaptureImage: TWIMCaptureImage;
  WIMLoadImage: TWIMLoadImage;
  WIMApplyImage: TWIMApplyImage;
  WIMGetImageInformation: TWIMGetImageInformation;
  WIMSetImageInformation: TWIMSetImageInformation;
  WIMGetMessageCallbackCount: TWIMGetMessageCallbackCount;
  WIMRegisterMessageCallback: TWIMRegisterMessageCallback;
  WIMUnregisterMessageCallback: TWIMUnregisterMessageCallback;
  WIMMessageCallback: TWIMMessageCallback;
  WIMCopyFile: TWIMCopyFile;
  WIMMountImage: TWIMMountImage;
  WIMMountImageHandle: TWIMMountImageHandle;
  WIMRemountImage: TWIMRemountImage;
  WIMCommitImageHandle: TWIMCommitImageHandle;
  WIMUnmountImage: TWIMUnmountImage;
  WIMUnmountImageHandle: TWIMUnmountImageHandle;
  WIMGetMountedImages: TWIMGetMountedImages;
  WIMGetMountedImageInfo: TWIMGetMountedImageInfo;
  WIMGetMountedImageInfoFromHandle: TWIMGetMountedImageInfoFromHandle;
  WIMGetMountedImageHandle: TWIMGetMountedImageHandle;
  WIMDeleteImageMounts: TWIMDeleteImageMounts;
  WIMRegisterLogFile: TWIMRegisterLogFile;
  WIMUnregisterLogFile: TWIMUnregisterLogFile;
  WIMExtractImagePath: TWIMExtractImagePath;
  WIMInitFileIOCallbacks: TWIMInitFileIOCallbacks;
  WIMSetFileIOCallbackTemporaryPath: TWIMSetFileIOCallbackTemporaryPath;

procedure InitWIMGAPI(const APath: String = WIMGAPI_LIBNAME);
function WIMGAPILoaded: Boolean;

implementation

var
  hWIMGAPI: THandle;

procedure InitWIMGAPI(const APath: String = WIMGAPI_LIBNAME);
begin
  if (hWIMGAPI = 0) then
  begin
    hWIMGAPI := LoadLibrary(PChar(APath));

    if (hWIMGAPI <> 0) then
    begin
      @WIMCreateFile := GetProcAddress(hWIMGAPI, 'WIMCreateFile');
      @WIMCloseHandle := GetProcAddress(hWIMGAPI, 'WIMCloseHandle');
      @WIMSetTemporaryPath := GetProcAddress(hWIMGAPI, 'WIMSetTemporaryPath');
      @WIMSetReferenceFile := GetProcAddress(hWIMGAPI, 'WIMSetReferenceFile');
      @WIMSplitFile := GetProcAddress(hWIMGAPI, 'WIMSplitFile');
      @WIMExportImage := GetProcAddress(hWIMGAPI, 'WIMExportImage');
      @WIMDeleteImage := GetProcAddress(hWIMGAPI, 'WIMDeleteImage');
      @WIMGetImageCount := GetProcAddress(hWIMGAPI, 'WIMGetImageCount');
      @WIMGetAttributes := GetProcAddress(hWIMGAPI, 'WIMGetAttributes');
      @WIMSetBootImage := GetProcAddress(hWIMGAPI, 'WIMSetBootImage');
      @WIMCaptureImage := GetProcAddress(hWIMGAPI, 'WIMCaptureImage');
      @WIMLoadImage := GetProcAddress(hWIMGAPI, 'WIMLoadImage');
      @WIMApplyImage := GetProcAddress(hWIMGAPI, 'WIMApplyImage');
      @WIMGetImageInformation := GetProcAddress(hWIMGAPI,
        'WIMGetImageInformation');
      @WIMSetImageInformation := GetProcAddress(hWIMGAPI,
        'WIMSetImageInformation');
      @WIMGetMessageCallbackCount := GetProcAddress(hWIMGAPI,
        'WIMGetMessageCallbackCount');
      @WIMRegisterMessageCallback := GetProcAddress(hWIMGAPI,
        'WIMRegisterMessageCallback');
      @WIMUnregisterMessageCallback := GetProcAddress(hWIMGAPI,
        'WIMUnregisterMessageCallback');
      @WIMMessageCallback := GetProcAddress(hWIMGAPI, 'WIMMessageCallback');
      @WIMCopyFile := GetProcAddress(hWIMGAPI, 'WIMCopyFile');
      @WIMMountImage := GetProcAddress(hWIMGAPI, 'WIMMountImage');
      @WIMMountImageHandle := GetProcAddress(hWIMGAPI, 'WIMMountImageHandle');
      @WIMRemountImage := GetProcAddress(hWIMGAPI, 'WIMRemountImage');
      @WIMCommitImageHandle := GetProcAddress(hWIMGAPI, 'WIMCommitImageHandle');
      @WIMUnmountImage := GetProcAddress(hWIMGAPI, 'WIMUnmountImage');
      @WIMUnmountImageHandle := GetProcAddress(hWIMGAPI,
        'WIMUnmountImageHandle');
      @WIMGetMountedImages := GetProcAddress(hWIMGAPI, 'WIMGetMountedImages');
      @WIMGetMountedImageInfo := GetProcAddress(hWIMGAPI,
        'WIMGetMountedImageInfo');
      @WIMGetMountedImageInfoFromHandle :=
        GetProcAddress(hWIMGAPI, 'WIMGetMountedImageInfoFromHandle');
      @WIMGetMountedImageHandle := GetProcAddress(hWIMGAPI,
        'WIMGetMountedImageHandle');
      @WIMDeleteImageMounts := GetProcAddress(hWIMGAPI, 'WIMDeleteImageMounts');
      @WIMRegisterLogFile := GetProcAddress(hWIMGAPI, 'WIMRegisterLogFile');
      @WIMUnregisterLogFile := GetProcAddress(hWIMGAPI, 'WIMUnregisterLogFile');
      @WIMExtractImagePath := GetProcAddress(hWIMGAPI, 'WIMExtractImagePath');
      @WIMInitFileIOCallbacks := GetProcAddress(hWIMGAPI,
        'WIMInitFileIOCallbacks');
      @WIMSetFileIOCallbackTemporaryPath :=
        GetProcAddress(hWIMGAPI, 'WIMSetFileIOCallbackTemporaryPath');
    end;
  end;
end;

procedure CloseWIMGAPI;
begin
  if (hWIMGAPI <> 0) then
  begin
    FreeLibrary(hWIMGAPI);
    hWIMGAPI := 0;
  end;
end;

function WIMGAPILoaded: Boolean;
begin
  Result := (hWIMGAPI <> 0);
end;

initialization

hWIMGAPI := 0;

WIMCreateFile := nil;
WIMCloseHandle := nil;
WIMSetTemporaryPath := nil;
WIMSetReferenceFile := nil;
WIMSplitFile := nil;
WIMExportImage := nil;
WIMDeleteImage := nil;
WIMGetImageCount := nil;
WIMGetAttributes := nil;
WIMSetBootImage := nil;
WIMCaptureImage := nil;
WIMLoadImage := nil;
WIMApplyImage := nil;
WIMGetImageInformation := nil;
WIMSetImageInformation := nil;
WIMGetMessageCallbackCount := nil;
WIMRegisterMessageCallback := nil;
WIMUnregisterMessageCallback := nil;
WIMMessageCallback := nil;
WIMCopyFile := nil;
WIMMountImage := nil;
WIMMountImageHandle := nil;
WIMRemountImage := nil;
WIMCommitImageHandle := nil;
WIMUnmountImage := nil;
WIMUnmountImageHandle := nil;
WIMGetMountedImages := nil;
WIMGetMountedImageInfo := nil;
WIMGetMountedImageInfoFromHandle := nil;
WIMGetMountedImageHandle := nil;
WIMDeleteImageMounts := nil;
WIMRegisterLogFile := nil;
WIMUnregisterLogFile := nil;
WIMExtractImagePath := nil;
WIMInitFileIOCallbacks := nil;
WIMSetFileIOCallbackTemporaryPath := nil;

finalization

CloseWIMGAPI;

ReportMemoryLeaksOnShutdown := True;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz