Partilhar via


IRP_MJ_DEVICE_CONTROL

Cada driver cujos objetos de dispositivo pertencem a um tipo de dispositivo específico (consulte Especificando tipos de dispositivo) é necessário para dar suporte a essa solicitação em uma rotina DispatchDeviceControl , se houver um conjunto de IOCTLs (códigos de controle de E/S definidos pelo sistema) para o tipo. Para obter mais informações sobre IOCTLs, consulte Introdução aos códigos de controle de E/S.

Os drivers de nível superior geralmente passam essas solicitações para um driver de dispositivo subjacente. Cada driver de dispositivo em uma pilha de driver é considerado para dar suporte a essa solicitação, juntamente com um conjunto de IOCTLs específicos, públicos ou privados do tipo de dispositivo. Para obter mais informações sobre IOCTLs para tipos de dispositivo específicos, consulte a documentação específica do tipo de dispositivo no WDK (Microsoft Windows Driver Kit).

Quando enviado

A qualquer momento após a conclusão bem-sucedida de uma solicitação de criação.

Parâmetros de Entrada

O código de controle de E/S está contido em Parameters.DeviceIoControl.IoControlCode no local da pilha de E/S do driver do IRP.

Outros parâmetros de entrada dependem do valor do código de controle de E/S. Para obter mais informações, consulte Descrições de buffer para códigos de controle de E/S.

Parâmetros de saída

Os parâmetros de saída dependem do valor do código de controle de E/S. Para obter mais informações, consulte Descrições de buffer para códigos de controle de E/S.

Operação

Um driver recebe esse código de controle de E/S porque o thread do modo de usuário chamou a função DeviceIoControl do Microsoft Win32 ou um driver de modo kernel de nível superior configurou a solicitação. Possivelmente, um driver de modo de usuário chamou DeviceIoControl, passando um código de controle de E/S definido pelo driver (também chamado de privado), para solicitar suporte específico do dispositivo ou do driver de um driver de dispositivo de modo kernel estreitamente acoplado.

Ao receber uma solicitação de controle de E/S do dispositivo, um driver de nível superior geralmente passa o IRP para o driver mais baixo. No entanto, há algumas exceções para essa prática. Por exemplo, um driver de classe que armazenou informações de configuração obtidas do driver de porta subjacente pode concluir determinadas solicitações IOCTL_XXX sem passar o IRP para o driver de porta correspondente.

Ao receber uma solicitação de controle de E/S do dispositivo, um driver de dispositivo examina o código de controle de E/S para determinar como atender à solicitação. Para a maioria dos códigos de controle de E/S públicos, os drivers de dispositivo transferem uma pequena quantidade de dados de ou para o buffer em Irp-AssociatedIrp.SystemBuffer>.

Para obter informações gerais sobre códigos de controle de E/S para solicitações de IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL , consulte Usando códigos de controle de E/S. Consulte também Solicitações de E/S do dispositivo Type-Specific.

Requisitos

parâmetro

Wdm.h (inclua Wdm.h, Ntddk.h ou Ntifs.h)

Confira também

DispatchDeviceControl