Códigos de função principais do IRP

Cada local de pilha de E/S específico do driver (IO_STACK_LOCATION) para cada IRP contém um código de função principal (IRP_MJ_XXX), que informa ao driver qual operação ele ou o driver de dispositivo subjacente deve realizar para atender à solicitação de E/S. Cada driver de modo kernel deve fornecer rotinas de expedição para os principais códigos de função aos quais ele deve dar suporte.

As operações específicas que um driver executa para um determinado código IRP_MJ_XXX dependem um pouco do dispositivo subjacente, especialmente para solicitações de IRP_MJ_DEVICE_CONTROL e IRP_MJ_INTERNAL_DEVICE_CONTROL . Por exemplo, as solicitações enviadas a um driver de teclado são necessariamente um pouco diferentes daquelas enviadas para um driver de disco. No entanto, o gerenciador de E/S define os parâmetros e o conteúdo do local da pilha de E/S para cada código de função principal definido pelo sistema.

Cada driver de nível superior deve configurar o local apropriado da pilha de E/S em IRPs para o driver de nível inferior e chamar IoCallDriver, seja com cada IRP de entrada ou com um IRP criado pelo driver (se o driver de nível superior se mantiver no IRP de entrada). Consequentemente, cada driver intermediário deve fornecer uma rotina de expedição para cada código de função principal que o driver de dispositivo subjacente manipula. Caso contrário, um novo driver intermediário "quebrará a cadeia" sempre que um aplicativo ou driver de nível superior tentar enviar uma solicitação de E/S para o driver de dispositivo subjacente.

Os drivers do sistema de arquivos e os drivers de filtro do sistema de arquivos herdados também lidam com um subconjunto necessário de códigos de função IRP_MJ_XXX definidos pelo sistema, alguns com códigos de função IRP_MN_XXX subordinados. Para obter mais informações sobre como lidar com esses IRPs, consulte Códigos de função principais do IRP para drivers do sistema de arquivos e drivers de filtro FS herdados.

Os drivers lidam com IRPs definidos com alguns ou todos os seguintes códigos de função principais:

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_INTERNAL_DEVICE_CONTROL

IRP_MJ_PNP

IRP_MJ_POWER

IRP_MJ_QUERY_INFORMATION

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_SHUTDOWN

IRP_MJ_SYSTEM_CONTROL

IRP_MJ_WRITE

Os parâmetros de entrada e saída descritos nesta seção são os parâmetros específicos da função no IRP.

Para obter mais informações sobre IRPs, consulte Manipulando IRPs.