Abrindo um handle em um arquivo
Para abrir um handle para um arquivo, execute as seguintes etapas:
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.
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.