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


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

Структура EXTENDED_CREATE_INFORMATION — это поле EaBuffer в NtCreateFile, если флаг FILE_CONTAINS_EXTENDED_CREATE_INFORMATION задан в параметре CreateOp tion 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

Флаг Значение
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 (include Wdm.h)

См. также

IoCheckFileObjectOpenedAsCopyDestination

IoCheckFileObjectOpenedAsCopySource

NtCopyFileChunk

NtCreateFile