Partilhar via


Métodos para acessar buffers de dados

Uma das principais responsabilidades das pilhas de driver é transferir dados entre aplicativos de modo de usuário e dispositivos de um 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 do sistema nãopagado, igual em tamanho ao 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 driver. Para operações de leitura, o gerenciador de 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 Usando 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 direta
O sistema operacional passa o endereço inicial virtual e o tamanho do buffer de aplicativo para a pilha de driver. O buffer só pode ser acessado por drivers executados no contexto de thread do aplicativo.

Para obter mais informações, consulte Usando nem E/S em buffer nem direta.

Para solicitações 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 device.

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 driver devem usar o mesmo método de acesso de buffer para cada solicitação, exceto possivelmente para o driver de nível mais alto (que pode usar o método "nenhum", independentemente do método usado por drivers inferiores).