Функция _WIM_ApplyImage

         Описание функции


_WIM_ApplyImage

Извлекает образ из wim-файла в указанный каталог

#Include <wimgapi.au3>
_WIM_ApplyImage ( $hImage, $sPath [, $dwApplyFlags = $WIM_FLAG_INDEX ] )

Параметры

$hImage Дескриптор образа возвращённый функцией _WIM_LoadImage() или _WIM_CaptureImage()
$sPath Каталог, в который будет выполнено извлечение
$dwApplyFlags [необязательный] Свойства функции при извлечении. Это может быть комбинацией следующих значений:
0 - Нет особенностей
$WIM_FLAG_VERIFY - Проверяет, что файлы соответствуют оригинальным данным
$WIM_FLAG_INDEX - Указывает, что образ должен считываться последовательно для кэширования или в целях повышения производительности.
$WIM_FLAG_NO_APPLY - Извлекает образ без физического создания каталогов или файлов. Полезно для получения списка файлов и каталогов в образе.
$WIM_FLAG_FILEINFO - Высылает сообщение WIM_MSG_FILEINFO во время операции извлечения
$WIM_FLAG_NO_RP_FIX - Отключает автоматическое исправление пути для связанных и символических ссылок.
$WIM_FLAG_NO_DIRACL - Отключает восстановление информации безопасности для каталогов.
$WIM_FLAG_NO_FILEACL - Отключает восстановление информации безопасности для файлов

Возвращаемое значение

Успех:Возвращает не ноль.
Ошибка:Возвращает 0 и устанавливает @error:
@error:1 - Не удалось использовать DLL файл
2 - Неизвестный тип возвращаемого значения
3 - Не найдена функция в DLL файле
4 - Не верное число параметров
В обоих случаях @extended равен _WinAPI_GetLastError()

Примечания

Для получения информации во время извлечения смотрите функцию _WIM_RegisterMessageCallback().
Чтобы получить список файлов в образе без фактического извлечения образа, укажите флаг $WIM_FLAG_NO_APPLY и зарегистрируйте функцию обратного вызова, которая обрабатывает сообщения $WIM_MSG_PROCESS. Чтобы получить дополнительную файловую информацию из сообщения $WIM_MSG_FILEINFO укажите флаг $WIM_FLAG_FILEINFO

См. также

_WIM_LoadImage, _WIM_RegisterMessageCallback

Пример

; Homes32
; http://www.autoitscript.com/forum/topic/127075-wimgapi-udf/
#include <wimgapi.au3>

Local $hWim, $hImage, $sPath, $sWimPath

$sWimPath = FileOpenDialog('Выбрать файл-образ', @WorkingDir, 'Образ (*.wim)', 3, 'install.wim')
If @error Then Exit

$sPath = FileSelectFolder('Выбрать папку, в которую извлечь', '', 3, @WorkingDir)
If @error Then Exit

$aResult = _WIM_Startup() ; Открывает wimgapi.dll
If @error Then Exit MsgBox(0, 'Сообщение', 'Ошибка открытия wimgapi.dll')

; Открывает существующий wim-файл
$hWim = _WIM_CreateFile($sWimPath, $WIM_GENERIC_READ + $WIM_GENERIC_WRITE, $WIM_OPEN_EXISTING, $WIM_FLAG_SHARE_WRITE, $WIM_COMPRESS_LZX)
If $hWim Then
    MsgBox(0, 'Сообщение', 'Дескриптор wim-файла $hWim = ' & $hWim)
Else
    MsgBox(0, 'Сообщение', 'Ошибка создания wim-файла')
    _Exit()
EndIf
; Устанавливает временную папку
$iRes = _WIM_SetTemporaryPath($hWim, @TempDir)
If Not $iRes Then
    MsgBox(0, 'Сообщение', 'Не удалось установить временную папку')
    _Exit()
EndIf
; Загружает образ
$hImage = _WIM_LoadImage($hWim, 1)
If $hImage Then
    MsgBox(0, 'Сообщение', 'Дескриптор образа $hImage = ' & $hImage)
Else
    MsgBox(0, 'Сообщение', 'Ошибка создания образа')
    _Exit()
EndIf
$iFlag = _WIM_ApplyImage($hImage, $sPath, $WIM_FLAG_INDEX)
If $iFlag Then
    MsgBox(0, 'Сообщение', 'Удачно извлечено = ' & $iFlag)
Else
    MsgBox(0, 'Сообщение', 'Неудача _WIM_ApplyImage')
EndIf
_Exit()

Func _Exit()
    If $hImage Then _WIM_CloseHandle($hImage) ; Закрывает открытый дескриптор
    If $hWim Then _WIM_CloseHandle($hWim) ; Закрывает открытый дескриптор
    _WIM_Shutdown() ; Выгружает wimgapi.dll
    Exit
EndFunc