Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As rotinas de expedição de um driver (consulte 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 dar suporte a 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 no 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 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 gerenciador de E/S configura um IRP e armazena o código de função principal IRP_MJ_DEVICE_CONTROL e o código de controle de E/S especificado na estrutura IO_STACK_LOCATION em Parameters.DeviceIoControl.IoControlCode. Em seguida, o gerente de E/S chama a rotina DispatchDeviceControl do driver de nível mais alto da cadeia.
Para determinados drivers fornecidos pelo sistema projetados para interoperar e oferecer 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 das vezes, esses códigos de controle de E/S públicos permitem que drivers de nível superior complementares funcionem em conjunto com um driver de dispositivo subjacente.
Por exemplo, os drivers paralelos fornecidos pelo sistema suportam um conjunto de códigos de controle de E/S internos que os drivers fornecidos pelo fornecedor enviam em solicitações IRP_MJ_INTERNAL_DEVICE_CONTROL. Para obter mais informações, consulte o Guia de Design do 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, pois esse tipo de solicitação raramente requer a transferência de grandes quantidades de dados. Ou seja, até 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 ou a partir 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úblicos podem ser adicionados ao sistema somente com a cooperação da Microsoft Corporation, pois os códigos de controle de E/S públicos são integrados 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 dar suporte e definir códigos de controle de E/S privados, consulte as seções de referência específicas do dispositivo do WDK (Windows Driver Kit).