Compartilhar via


Responsabilidades necessárias do DriverEntry

As responsabilidades necessárias e ordenadas de uma rotina DriverEntry são as seguintes:

  1. 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.

  2. 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 .)

  3. Libere qualquer memória alocada e não seja mais necessária.

  4. 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.)