Compartilhar via


Métodos para acessar buffers de dados

Uma das principais responsabilidades das pilhas de drivers é transferir dados entre aplicativos em modo de usuário e os dispositivos do sistema. O sistema operacional fornece os três métodos a seguir para acessar buffers de dados:

E/S em buffer
O sistema operacional cria um buffer de sistema não paginado, do mesmo tamanho que o buffer do aplicativo. Para operações de gravação, o gerenciador de E/S copia os dados do usuário para o buffer do sistema antes de chamar a pilha de drivers. Para operações de leitura, o gerenciador de entrada/saída (E/S) copia dados do buffer do sistema para o buffer do aplicativo depois que a pilha de driver conclui a operação solicitada.

Para obter mais informações, consulte Como usar E/S em buffer.

E/S direta
O sistema operacional bloqueia o buffer do aplicativo na memória. Em seguida, ele cria uma MDL (lista de descritores de memória) que identifica as páginas de memória bloqueadas e passa o MDL para a pilha de driver. Os drivers acessam as páginas bloqueadas por meio do MDL.

Para obter mais informações, consulte Usando E/S Direta.

Nem e/S em buffer nem direto
O sistema operacional passa o endereço de início virtual e o tamanho do buffer de aplicativo para a pilha de drivers. O buffer só pode ser acessado por drivers que são executados no contexto de thread do aplicativo.

Para obter mais informações, consulte Não usar E/S com buffer nem direta.

Para solicitações de IRP_MJ_READ e IRP_MJ_WRITE , os drivers especificam o método de E/S usando sinalizadores em cada estrutura DEVICE_OBJECT . Para obter mais informações, consulte Inicializando um objeto de dispositivo.

Para solicitações de IRP_MJ_DEVICE_CONTROL e IRP_MJ_INTERNAL_DEVICE_CONTROL , o método de E/S é determinado pelo valor TransferType contido em cada valor IOCTL. Para obter mais informações, consulte Definindo códigos de controle de E/S.

Todos os drivers em uma pilha de drivers devem usar o mesmo método de acesso ao buffer para cada solicitação, exceto, possivelmente, o driver de nível mais alto (que pode utilizar o método "nenhum", independentemente do método usado por drivers inferiores).