Поделиться через


структура EXTENDED_CREATE_INFORMATION (wdm.h)

Структура EXTENDED_CREATE_INFORMATION — это поле EaBuffer в NtCreateFile , если флаг FILE_CONTAINS_EXTENDED_CREATE_INFORMATION установлен в параметре CreateOption ntCreateFile.

Синтаксис

typedef struct _EXTENDED_CREATE_INFORMATION {
  LONGLONG                          ExtendedCreateFlags;
  PVOID                             EaBuffer;
  ULONG                             EaLength;
  PEXTENDED_CREATE_DUAL_OPLOCK_KEYS DualOplockKeys;
} EXTENDED_CREATE_INFORMATION, *PEXTENDED_CREATE_INFORMATION;

Члены

ExtendedCreateFlags

Флаги для расширенного создания. ExtendedCreateFlags может иметь одно из следующих значений. Если указан любой из этих флагов, объект файла NtCreateFile помечается как открытый для намерения копирования в файле FileObjectExtension. Фильтры могут проверка для этого сохраненного состояния путем вызова IoCheckFileObjectOpenedAsCopySource или IoCheckFileObjectOpenedAsCopyDestination

Flag Значение
EX_CREATE_FLAG_FILE_SOURCE_OPEN_FOR_COPY (0x00000001) Сигнализирует о том, что файл открывается в качестве исходного файла для копирования файла.
EX_CREATE_FLAG_FILE_DEST_OPEN_FOR_COPY (0x00000002) Сигнализирует о том, что файл открывается в качестве целевого файла для копирования файла.

Наличие одного из указанных выше флагов недостаточно для обеспечения надежности операций чтения и записи (операций ввода-вывода) в объекте файла, так как любой процесс пользовательского режима может предоставить эти флаги во время создания.

EaBuffer

Указатель на буфер расширенных атрибутов.

EaLength

Длина буфера, на который указывает EaBuffer .

DualOplockKeys

Комментарии

В следующем примере показано, как предоставить структуру EXTENDED_CREATE_INFORMATION в NtCreateFile, правильно упаковав EaBuffer и EaLength внутри.

// Input parameters to NtCreateFile. Obtaining these
// values is not shown in this sample.

HANDLE SourceFile; 
ACCESS_MASK DesiredAccess; 
OBJECT_ATTRIBUTES ObjectAttributes; 
IO_STATUS_BLOCK IoStatus; 
ULONG FileAttributes; 
ULONG ShareAccess; 
ULONG CreateDisposition; 
ULONG CreateOptions; 
PVOID EaBuffer = NULL; 
ULONG EaLength = 0; 
EXTENDED_CREATE_INFORMATION ExtendedCreateInfo; 

// Populate the extended create info. The
// ExtendedCreateFlags field could also be
// EX_CREATE_FLAG_FILE_DESTINATION_OPEN_FOR_COPY.
 
ExtendedCreateInfo.EaBuffer = EaBuffer; 
ExtendedCreateInfo.EaLength = EaLength; 
ExtendedCreateInfo.ExtendedCreateFlags = EX_CREATE_FLAG_FILE_SOURCE_OPEN_FOR_COPY; 

// Set the create option flag to indicate the
// EaBuffer actually contains extended create info.
 
CreateOptions |= FILE_CONTAINS_EXTENDED_CREATE_INFORMATION; 

// Open the file 

Status = NtCreateFile(&SourceFile, 
                      DesiredAccess, 
                      &ObjectAttributes, 
                      &IoStatus, 
                      NULL, 
                      FileAttributes, 
                      SharseAccess, 
                      CreateDisposition, 
                      CreateOptions, 
                      &ExtendedCreateInfo, 
                      sizeof(EXTENDED_CREATE_INFORMATION));

Дополнительные сведения см. в разделе Копирование файлов в режиме ядра и обнаружение сценариев копирования файлов.

Требования

Требование Значение
Минимальная версия клиента Windows 11 версии 22H2
Верхняя часть wdm.h (включая Wdm.h)

См. также раздел

IoCheckFileObjectOpenedAsCopyDestination

IoCheckFileObjectOpenedAsCopySource

NtCopyFileChunk

NtCreateFile