Функция _WIM_CreateFile

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


_WIM_CreateFile

Создаёт новый wim-файл или открывает существующий

#Include <wimgapi.au3>
_WIM_CreateFile ( $sWimPath [, $dwDesiredAccess = $WIM_GENERIC_READ [, $dwCreationDisposition = $WIM_OPEN_ALWAYS [, $dwFlagsAndAttributes = $WIM_FLAG_SHARE_WRITE [, $dwCompressionType = $WIM_COMPRESS_XPRESS [, $pdwCreationResult = 0 ]]]]] )

Параметры

$sWimPath Путь к wim-файлу
$dwDesiredAccess [необязательный] Указывает тип доступа к объекту. Приложение может получить доступ на чтение, запись, чтение/запись или выполнить запрос доступа. Этот параметр может быть комбинацией следующих значений:
0 - Запрос доступа к файлу. Приложение может запросить информацию о wim-файл без доступа к нему.
$WIM_GENERIC_READ - Доступ только для чтения wim-файла. Enables images to be applied from the file. Совместим с $WIM_GENERIC_WRITE для доступа чтения/записи (добавляет).
$WIM_GENERIC_WRITE - Доступ для записи wim-файла. Позволяет wim-файлу быть сохранённым в файл. Включает $WIM_GENERIC_READ доступ, позволяя операции "apply" (извлечь содержимое) и "append" (добавить образ в существующий wim-файл)
$WIM_GENERIC_MOUNT - Доступ для монтирования wim-файла. Позволяет монтировать wim-файл с помощью _WIM_MountImageHandle.
$dwCreationDisposition [необязательный] Определяет, какие действия выполнять с файлами, которые существуют, и какие действия выполнять с файлами, которые не существуют. Этот параметр может быть одним из следующих значений:
$WIM_CREATE_NEW - Создаёт новый wim-файл. Если указанный wim-файл уже существует, функция завершается с ошибкой.
$WIM_CREATE_ALWAYS - Создаёт новый wim-файл. Если wim-файл существует, то функция переписывает его.
$WIM_OPEN_EXISTING - Открывает существующий wim-файл. Если wim-файл не существует, то функция завершается с ошибкой.
$WIM_OPEN_ALWAYS - Открывает wim-файл, если он существует. Если wim-файл не существует, и при вызове используется доступ $WIM_GENERIC_WRITE, то функция создаёт файл.
$dwFlagsAndAttributes [необязательный] Определяет специальные действия, которые необходимо принять для указанного файла.
$WIM_FLAG_VERIFY - Создаёт сведения о целостности данных для новых файлов. Проверяет и обновляет существующие файлы.
$WIM_FLAG_SHARE_WRITE - Открывает wim-файл в режиме, который позволяет одновременно чтение и запись.
$dwCompressionType [необязательный] Режим сжатия, который будет использоваться для вновь созданного wim-файла. Если файл уже существует, то это значение игнорируется. Этот параметр может быть одним из следующих значений:
$WIM_COMPRESS_NONE - Не использует сжатие файлов.
$WIM_COMPRESS_XPRESS - Использует XPRESS сжатие файлов (быстрое).
$WIM_COMPRESS_LZX - Использует LZX сжатие файлов (макс.).
$pdwCreationResult [необязательный] Укажите одно из следующих значений, которое определяет результат создания. Если эта информация не требуется, укажите 0.
$WIM_CREATED_NEW - Wim-файл не существует и был создан.
$WIM_OPENED_EXISTING - Wim-файл существовал и был открыт для доступа.

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

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

Примечания

Используйте функцию _WIM_CloseHandle() чтобы закрыть дескриптор, возвращенный функцией _WIM_CreateFile().

См. также

_WIM_CloseHandle

Пример

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

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

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

$sWimPath = FileSaveDialog('Сохранить в wim-файл', @WorkingDir, 'Образ (*.wim)', 16, 'install.wim')
If @error Then Exit
If StringRight($sWimPath, 4) <> '.wim' Then
    $sWimPath &= '.wim'
    If FileExists($sWimPath) And MsgBox(4, 'Сообщение', $sWimPath & ' уже существует.' & @LF & 'Заменить?') = 7 Then Exit
EndIf

$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_CREATE_ALWAYS, $WIM_FLAG_SHARE_WRITE, $WIM_COMPRESS_LZX)
If $hWim Then
    MsgBox(0, 'Сообщение', 'Дескриптор wim-файла $hWim = ' & $hWim)
Else
    MsgBox(0, 'Сообщение', 'Ошибка создания wim-файла')
    _Exit()
EndIf
; Добавляет файлы указанного каталога в образ
$hImage = _WIM_CaptureImage($hWim, $sPath, $WIM_FLAG_VERIFY)
If $hImage Then
    MsgBox(0, 'Сообщение', 'Дескриптор образа $hImage = ' & $hImage)
Else
    MsgBox(0, 'Сообщение', 'Ошибка создания образа')
EndIf
_Exit()

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