Compartilhar via


Responsabilidades necessárias do DriverEntry

As responsabilidades ordenadas necessárias 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 extensão de driver. Esses pontos de entrada incluem aqueles para a rotina AddDevice do driver, rotinas de despacho, rotina StartIo e rotina Unload. 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 rotinas ISRs ou IoCompletion , são especificadas por meio da chamada de 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 diversos objetos, tipos ou recursos que o driver utiliza. Observe que a maioria das rotinas padrão usa objetos por dispositivo, portanto, os drivers devem configurar esses objetos em suas rotinas do AddDevice ou depois de receber uma solicitação IRP_MN_START_DEVICE .

    Se o driver tiver uma thread dedicada ao dispositivo ou estiver aguardando qualquer objeto de despachante definido pelo kernel, a rotina DriverEntry poderá inicializar objetos de despachante do kernel. (Dependendo de como o driver usa os objetos, ele pode executar essa tarefa em sua rotina AddDevice ou depois de receber uma solicitação IRP_MN_START_DEVICE .)

  3. Libere qualquer memória que tenha sido 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. (Veja os valores retornados do DriverEntry.)