Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
As rotinas de despacho de um motorista (ver DRIVER_DISPATCH) lidam com IRPs com códigos de função de E/S de IRP_MJ_DEVICE_CONTROL e IRP_MJ_INTERNAL_DEVICE_CONTROL, respectivamente.
Para cada tipo comum de dispositivo periférico, o sistema define um conjunto de códigos de controle de E/S para solicitações de IRP_MJ_DEVICE_CONTROL . Novos drivers para cada tipo de dispositivo devem suportar essas solicitações. Na maioria dos casos, esses códigos de controle de E/S públicos para cada tipo de dispositivo não são exportados para aplicativos de modo de usuário.
Alguns desses códigos de controle de E/S definidos pelo sistema são usados por drivers de nível superior que criam IRPs para o driver de dispositivo subjacente chamando IoBuildDeviceIoControlRequest. Outros são usados por componentes do Win32 para se comunicar com um driver de dispositivo subjacente chamando a função Win32 DeviceIoControl (descrita na documentação do SDK do Microsoft Windows) que, por sua vez, chama um serviço do sistema. O gestor de E/S configura um IRP e armazena o principal código de função IRP_MJ_DEVICE_CONTROL e o código de controlo de E/S fornecido na estrutura IO_STACK_LOCATION em Parameters.DeviceIoControl.IoControlCode. Em seguida, o gerenciador de E/S chama a rotina DispatchDeviceControl do driver de nível mais alto da cadeia.
Para drivers fornecidos pelo sistema que são projetados para interoperar com e dar suporte a novos drivers, o sistema operacional também define um conjunto de códigos de controle de E/S para solicitações de IRP_MJ_INTERNAL_DEVICE_CONTROL. Na maioria dos casos, esses códigos de controle de E/S públicos permitem que drivers adicionais de nível superior interoperem com um driver de dispositivo subjacente.
Como exemplo, os drivers paralelos fornecidos pelo sistema suportam um conjunto de códigos internos de controlo de E/S que os drivers fornecidos pelo fornecedor enviam em solicitações IRP_MJ_INTERNAL_DEVICE_CONTROL. Para obter mais informações, consulte o Guia de Conceção de Driver de Dispositivo Paralelo.
Quase todas as operações solicitadas por meio de códigos de controle de E/S definidos pelo sistema usam E/S em buffer, porque esse tipo de solicitação raramente requer a transferência de grandes quantidades de dados. Ou seja, mesmo os drivers que configuram seus objetos de dispositivo para E/S direta recebem IRPs para solicitações de controle de dispositivo com dados a serem transferidos para dentro ou para fora do buffer em Irp-AssociatedIrp.SystemBuffer> (exceto para certos tipos de drivers de dispositivo de nível mais alto com drivers multimídia Win32 intimamente acoplados).
Além disso, um driver pode definir um conjunto de códigos de controle de E/S privados que outros drivers podem usar para se comunicar com ele. Novos códigos de controle de E/S públicas podem ser adicionados ao sistema somente com a cooperação da Microsoft Corporation, porque os códigos de controle de E/S públicas são incorporados ao próprio sistema operacional.
Para obter informações específicas sobre o conjunto de códigos de controle de E/S públicos que diferentes tipos de drivers devem suportar e sobre como definir códigos de controle de E/S privados, consulte as seções de referência específicas do dispositivo do Kit de Driver do Windows (WDK).