Abrindo um handle em um arquivo

Para abrir um handle para um arquivo, execute as seguintes etapas:

  1. Crie uma OBJECT_ATTRIBUTES e chame a macro InitializeObjectAttributes para inicializar a estrutura. Especifique o nome do objeto do arquivo como o parâmetro ObjectName para InitializeObjectAttributes.

  2. Abra um handle para o arquivo passando a estrutura OBJECT_ATTRIBUTES para IoCreateFile, ZwCreateFile ou ZwOpenFile.

    Se o arquivo não existir, IoCreateFile e ZwCreateFile o criarão, enquanto ZwOpenFile retornará STATUS_OBJECT_NAME_NOT_FOUND.

Observe que os drivers quase sempre usam ZwCreateFile ou ZwOpenFile em vez de IoCreateFile.

Quando você chama IoCreateFile, ZwCreateFile ou ZwOpenFile, o executivo do Windows cria um novo objeto de arquivo para representar o arquivo e fornece um identificador aberto para o objeto. Esse objeto de arquivo persiste até que você feche todos os identificador abertos para ele.

Seja qual for a rotina chamada, você deve passar os direitos de acesso necessários como o parâmetro DesiredAccess . Esses direitos devem abranger todas as operações que o driver executará. A tabela a seguir lista essas operações e o direito de acesso correspondente a ser solicitado.

Operação Direito de acesso necessário

Leia do arquivo.

FILE_READ_DATA ou GENERIC_READ

Gravar no arquivo.

FILE_WRITE_DATA ou GENERIC_WRITE

Escreva somente no final do arquivo.

FILE_APPEND_DATA

Leia os metadados do arquivo, como a hora de criação do arquivo.

FILE_READ_ATTRIBUTES ou GENERIC_READ

Escreva os metadados do arquivo, como a hora de criação do arquivo.

FILE_WRITE_ATTRIBUTES ou GENERIC_WRITE

Para obter mais informações sobre os valores disponíveis para DesiredAccess, consulte ZwCreateFile.