Manipulando um IRP ao qual a Estrutura não dá suporte
[Aplica-se somente ao KMDF]
A estrutura não dá suporte a solicitações de E/S que têm os seguintes códigos IRP principais:
- IRP_MJ_CREATE_MAILSLOT
- IRP_MJ_CREATE_NAMED_PIPE
- IRP_MJ_DEVICE_CHANGE
- IRP_MJ_DIRECTORY_CONTROL
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_LOCK_CONTROL
- IRP_MJ_QUERY_EA
- IRP_MJ_QUERY_INFORMATION
- IRP_MJ_QUERY_QUOTA
- IRP_MJ_QUERY_SECURITY
- IRP_MJ_QUERY_VOLUME_INFORMATION
- IRP_MJ_SET_EA
- IRP_MJ_SET_INFORMATION
- IRP_MJ_SET_QUOTA
- IRP_MJ_SET_SECURITY
- IRP_MJ_SET_VOLUME_INFORMATION
Se a estrutura receber um IRP que contém um desses códigos de função de E/S, a estrutura não processará o IRP. Se o driver for um driver de filtro, a estrutura passará o IRP para o driver mais baixo na pilha de driver. Se o driver não for um driver de filtro, a estrutura chamará IoCompleteRequest para concluir o IRP com um valor status de STATUS_INVALID_DEVICE_REQUEST.
Se o driver precisar manipular IRPs que contenham qualquer um desses códigos de função de E/S, o driver deverá chamar a função de retorno de chamada de evento WdfDeviceInitAssignWdmIrpPreprocessCallback para registrar uma função de retorno de chamada de evento EvtDeviceWdmIrpPreprocess para um código de função de E/S.
Quando o driver recebe um IRP que contém um código de função de E/S para o qual o driver registrou uma função de retorno de chamada EvtDeviceWdmIrpPreprocess , a estrutura passa o IRP para a função de retorno de chamada. A função de retorno de chamada deve processar o IRP seguindo as regras do WDM para lidar com IRPs. O driver deve chamar IoCompleteRequest para concluir o IRP ou deve chamar IoCallDriver para passar o IRP para o driver inferior seguinte.
Para obter um exemplo de uma função de retorno de chamada EvtDeviceWdmIrpPreprocess que manipula um IRP ao qual a estrutura não dá suporte, consulte o driver de exemplo serial .