Responsabilidades necessárias do DriverEntry
As responsabilidades necessárias e ordenadas de uma rotina DriverEntry são as seguintes:
Forneça pontos de entrada para as rotinas padrão do driver.
O driver armazena pontos de entrada para muitas de suas rotinas padrão no objeto de driver ou na extensão do driver. Esses pontos de entrada incluem aqueles para a rotina AddDevice do driver, rotinas de expedição, rotina StartIo e rotina de descarregamento . Por exemplo, um driver definiria os pontos de entrada para suas rotinas AddDevice, DispatchPnP e DispatchPower com instruções como a seguinte (Xxx é um espaço reservado para um prefixo fornecido pelo fornecedor que identifica o driver):
: DriverObject->DriverExtension->AddDevice = XxxAddDevice; DriverObject->MajorFunction[IRP_MJ_PNP] = XxxDispatchPnp; DriverObject->MajorFunction[IRP_MJ_POWER] = XxxDispatchPower; :
Rotinas padrão adicionais, como ISRs ou rotinas IoCompletion , são especificadas chamando rotinas de suporte do sistema. Para obter mais informações, consulte as descrições de rotinas de driver padrão individuais.
Crie e/ou inicialize vários objetos, tipos ou recursos em todo o driver que o driver usa. Observe que a maioria das rotinas padrão usa objetos por dispositivo, portanto, os drivers devem configurar esses objetos em suas rotinas AddDevice ou depois de receber uma solicitação de IRP_MN_START_DEVICE .
Se o driver tiver um thread dedicado ao dispositivo ou aguardar qualquer objeto dispatcher definido pelo kernel, a rotina DriverEntry poderá inicializar objetos dispatcher de kernel. (Dependendo de como o driver usa os objetos, ele pode, em vez disso, executar essa tarefa em sua rotina AddDevice ou depois de receber uma solicitação de IRP_MN_START_DEVICE .)
Libere qualquer memória alocada e não seja mais necessária.
Retornar NTSTATUS indicando se o driver foi carregado com êxito e pode aceitar e processar solicitações do gerenciador PnP para configurar, adicionar e iniciar seus dispositivos. (Consulte DriverEntry Return Values.)