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.

Drivers de nível superior geralmente passam essas solicitações para um driver de dispositivo subjacente. Supõe-se que cada driver de dispositivo em uma pilha de driver dá suporte a essa solicitação, juntamente com um conjunto de IOCTLs públicas ou privadas específicas 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 de 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 de modo de usuário chamou a função DeviceIoControl do Microsoft Win32 ou um driver de modo kernel de nível superior definiu 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 particular) para solicitar suporte específico do dispositivo ou do driver de um driver de dispositivo de modo kernel estreitamente aparado.

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

Após o recebimento de 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 para ou do buffer em Irp-AssociatedIrp.SystemBuffer>.

Para obter informações gerais sobre códigos de controle de E/S para solicitações 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 Type-Specific dispositivo.

Requisitos

Cabeçalho

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

Confira também

DispatchDeviceControl