Você está offline; aguardando reconexão
Entrar

Não há suporte para seu navegador

Você precisa atualizar seu navegador para usar o site.

Atualize para a versão mais recente do Internet Explorer

Como abrir um arquivo de um driver de dispositivo de modo kernel e como ler ou gravar no arquivo

O suporte para o Windows XP terminou

A Microsoft terminou o suporte para o Windows XP em 8 de abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

O suporte para o Windows Server 2003 termina em 14 de julho de 2015.

A Microsoft terminou o suporte para o Windows Server 2003 em 14 de julho de 2015. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 891805
INTRODUÇÃO
Este artigo descreve como abrir um arquivo de disco a partir de um driver de dispositivo do modo de kernel e como ler ou gravar no arquivo.
Mais Informações

Referir-se para um arquivo pelo seu nome de objeto

Drivers de dispositivo no modo kernel referir-se um arquivo pelo seu nome de objeto. Esse nome é \DosDevices juntamente com o caminho completo do arquivo. Por exemplo, o nome do objeto do arquivo C:\Windows\Example.txt é \DosDevices\C:\Windows\Example.txt. Em seguida, o nome do objeto é encapsulado em uma estrutura OBJECT_ATTRIBUTES chamando a função InitializeObjectAttributes .

Observação Se o driver de dispositivo é carregado no início, o namespace \DosDevices não pode ainda existir. Portanto, o namespace \DosDevices é inacessível para o driver de dispositivo porque nenhuma letra de unidade é exposta. A única parte do sistema de arquivos é garantido que estará disponível é o namespace \SystemRoot . O namespace \SystemRoot é mapeado para a pasta onde o sistema operacional está instalado. Por exemplo, esta pasta pode ser C:\Windows ou D:\Winnt.

O exemplo de código a seguir ilustra como referir-se para um arquivo por seu nome de objeto.
    UNICODE_STRING     uniName;    OBJECT_ATTRIBUTES  objAttr;    RtlInitUnicodeString(&uniName, L"\\DosDevices\\C:\\WINDOWS\\example.txt");  // or L"\\SystemRoot\\example.txt"    InitializeObjectAttributes(&objAttr, &uniName,                               OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,                               NULL, NULL);

Obter um identificador de arquivo

Para obter um identificador de arquivo, você pode passar uma estrutura OBJECT_ATTRIBUTES para a função ZwCreateFile . O parâmetro DesiredAccess pode ser definido como LEITURA_GENÉRICA , GRAVAÇÃO_GENÉRICA ou GENÉRICO_TUDO , dependendo do que você deseja fazer. Se você definir o parâmetro CreateOptions FILE_SYNCHRONOUS_IO_NONALERT ou FILE_SYNCHRONOUS_IO_ALERT , o sistema de arquivos controla do atual deslocamento de posição do arquivo. Portanto, você seqüencialmente pode ler ou gravar o arquivo mais tarde. Além disso, você pode acessar o arquivo em um local aleatório.

O exemplo de código a seguir ilustra como obter um identificador de arquivo.
    HANDLE   handle;    NTSTATUS ntstatus;    IO_STATUS_BLOCK    ioStatusBlock;    // Do not try to perform any file operations at higher IRQL levels.    // Instead, you may use a work item or a system worker thread to perform file operations.    if(KeGetCurrentIrql() != PASSIVE_LEVEL)        return STATUS_INVALID_DEVICE_STATE;     ntstatus = ZwCreateFile(&handle,                            GENERIC_WRITE,                            &objAttr, &ioStatusBlock, NULL,                            FILE_ATTRIBUTE_NORMAL,                            0,                            FILE_OVERWRITE_IF,                             FILE_SYNCHRONOUS_IO_NONALERT,                            NULL, 0);

Ler ou gravar em um arquivo

Agora você pode chamar a função ZwReadFile ou a função ZwWriteFile . Quando você tiver terminado de modificar o arquivo, feche o identificador usando a função ZwClose .

O exemplo de código a seguir ilustra como gravar em um arquivo.
    #define  BUFFER_SIZE 30    CHAR     buffer[BUFFER_SIZE];    size_t  cb;    if(NT_SUCCESS(ntstatus)) {        ntstatus = RtlStringCbPrintfA(buffer, sizeof(buffer), "This is %d test\r\n", 0x0);    	if(NT_SUCCESS(ntstatus)) {      	    ntstatus = RtlStringCbLengthA(buffer, sizeof(buffer), &cb);       	    if(NT_SUCCESS(ntstatus)) {                ntstatus = ZwWriteFile(handle, NULL, NULL, NULL, &ioStatusBlock,	          		       buffer, cb, NULL, NULL);       	    }    	}        ZwClose(handle);    }
o exemplo de código a seguir ilustra como ler a partir de um arquivo.
    LARGE_INTEGER      byteOffset;    ntstatus = ZwCreateFile(&handle,                            GENERIC_READ,                            &objAttr, &ioStatusBlock,                            NULL,                            FILE_ATTRIBUTE_NORMAL,                            0,                            FILE_OPEN,                             FILE_SYNCHRONOUS_IO_NONALERT,                            NULL, 0);    if(NT_SUCCESS(ntstatus)) {        byteOffset.LowPart = byteOffset.HighPart = 0;        ntstatus = ZwReadFile(handle, NULL, NULL, NULL, &ioStatusBlock,                              buffer, BUFFER_SIZE, &byteOffset, NULL);        if(NT_SUCCESS(ntstatus)) {            buffer[BUFFER_SIZE-1] = '\0';            DbgPrint("%s\n", buffer);        }        ZwClose(handle);    }
Referências
Para obter mais informações sobre como usar arquivos em um driver, consulte a seção "Usando arquivos em um driver" Windows Driver Development Kit.

Para obter mais informações sobre o Windows Driver Development Kit, visite o seguinte site:

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 891805 - Última Revisão: 06/07/2006 18:40:46 - Revisão: 2.1

  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Server
  • kbmt kbhowto kbinfo KB891805 KbMtpt
Comentários
> + (window.location.protocol) + "//c.microsoft.com/ms.js'><\/script>"); &t=">