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.
Os códigos de controlo de entrada/saída (IOCTLs) são utilizados para comunicação entre aplicações em modo de utilizador e controladores, ou para comunicação interna entre controladores numa pilha. Os códigos de controle de E/S são enviados usando IRPs.
Os aplicativos de modo de usuário enviam IOCTLs para drivers chamando DeviceIoControl, que é descrito na documentação do SDK do Microsoft Windows. As chamadas para DeviceIoControl fazem com que o gerenciador de E/S crie uma solicitação de IRP_MJ_DEVICE_CONTROL e a envie para o driver mais alto.
Adicionalmente, os drivers de nível superior podem enviar comandos IOCTLs para drivers de nível inferior ao criar e enviar solicitações IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL. Os drivers processam essas solicitações nas rotinas DispatchDeviceControl e DispatchInternalDeviceControl . (Os aplicativos de modo de usuário não podem enviar solicitações IRP_MJ_INTERNAL_DEVICE_CONTROL .)
Algumas IOCTLs são públicas e outras privadas. IOCTLs públicas são normalmente definidas pelo sistema e documentadas pela Microsoft, no Kit de Driver do Windows (WDK) ou no SDK do Windows. Eles podem ser enviados com chamadas de um componente de modo de usuário para DeviceIoControl ou podem ser enviados de um driver de modo kernel para outro, usando solicitações IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL .
IOCTLs privadas, por outro lado, destinam-se a ser usadas exclusivamente pelos componentes de software de um fornecedor para se comunicarem uns com os outros. IOCTLs privadas são normalmente definidas em um arquivo de cabeçalho fornecido pelo fornecedor e não são documentadas publicamente. Como IOCTLs públicas, podem ser enviadas com chamadas de um componente em modo utilizador para DeviceIoControl, ou podem ser enviadas de um driver de modo kernel para outro, usando solicitações IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL.
Não há diferença entre a codificação de IOCTLs públicas e privadas. Há, no entanto, diferenças nos códigos internos que podem ser usados em IOCTLs definidas pelo fornecedor, em comparação com aqueles que são usados para IOCTLs definidas pelo sistema. Se as IOCTLs públicas disponíveis não atenderem às suas necessidades, você poderá definir novas IOCTLs privadas que seus componentes de software podem usar para se comunicar entre si. Para obter mais informações, consulte Definir os Códigos de Controlo de E/S.