estrutura EXTENDED_CREATE_INFORMATION (wdm.h)

A estrutura EXTENDED_CREATE_INFORMATION é o campo EaBuffer em NtCreateFile quando o sinalizador FILE_CONTAINS_EXTENDED_CREATE_INFORMATION é definido no parâmetro CreateOption de NtCreateFile.

Sintaxe

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

Membros

ExtendedCreateFlags

Sinalizadores para a criação estendida. ExtendedCreateFlags pode ser um dos valores a seguir. Quando um desses sinalizadores é especificado, o objeto de arquivo de NtCreateFile é marcado como aberto para a intenção de cópia em seu FileObjectExtension. Os filtros podem marcar para esse estado armazenado chamando IoCheckFileObjectOpenedAsCopySource ou IoCheckFileObjectOpenedAsCopyDestination

Sinalizador Significado
EX_CREATE_FLAG_FILE_SOURCE_OPEN_FOR_COPY (0x00000001) Sinaliza que o arquivo está sendo aberto como o arquivo de origem para uma cópia de arquivo.
EX_CREATE_FLAG_FILE_DEST_OPEN_FOR_COPY (0x00000002) Sinaliza que o arquivo está sendo aberto como o arquivo de destino para uma cópia de arquivo.

A presença de um dos sinalizadores acima não é suficiente para garantir que as leituras/gravações (operações de E/S) no objeto de arquivo sejam confiáveis, pois qualquer processo de modo de usuário pode fornecer esses sinalizadores no momento da criação.

EaBuffer

Ponteiro para o buffer de atributos estendidos.

EaLength

Comprimento do buffer para o qual o EaBuffer aponta.

Comentários

O exemplo a seguir mostra como fornecer uma estrutura EXTENDED_CREATE_INFORMATION para NtCreateFile, encapsulando corretamente o EaBuffer e o EaLength internamente.

// 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));

Para obter mais informações, consulte Cópia de arquivo no modo kernel e detecção de cenários de arquivo de cópia.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 11, versão 22H2
Cabeçalho wdm.h (include Wdm.h)

Confira também

IoCheckFileObjectOpenedAsCopyDestination

IoCheckFileObjectOpenedAsCopySource

NtCopyFileChunk

NtCreateFile