Partilhar via


Migrando DriverEntry

Em drivers WDM e baseados em framework, a função DriverEntry é o ponto de entrada principal. O protótipo da função é o mesmo em ambos os modelos. Em um driver WDM, o sistema chama DriverEntry quando o driver é carregado pela primeira vez na memória. DriverEntry define um ponteiro para a rotina dedoAddDevice do driver no campo DriverExtension->AddDevice da estrutura DRIVER_OBJECT, define ponteiros para suas rotinas de despacho de E/S na matriz MajorFunction do MajorFunction da estrutura DRIVER_OBJECT e, em seguida, retorna. Em um driver baseado em framework, o sistema chama a função interna FxDriverEntry ao carregar o driver. Essa função interna inicializa o framework e, em seguida, chama a função DriverEntry do driver. DriverEntry define um ponteiro para o do driver EvtDriverDeviceAdd retorno de chamada e chama WdfDriverCreate para criar o objeto WDFDRIVER, como mostra o exemplo a seguir:

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT  DriverObject
    IN PUNICODE_STRING RegistryPath
    )
{
    WDF_DRIVER_CONFIG config;

    WDF_DRIVER_CONFIG_INIT( &config,
                              ToasterEvtDeviceAdd );
    status = WdfDriverCreate(
                 DriverObject,
                 RegistryPath,
                 WDF_NO_OBJECT_ATTRIBUTES,
                 &config,
                 WDF_NO_HANDLE
             );

    return STATUS_SUCCESS;
}

DriverEntry também inicializa quaisquer dados ou recursos globais que o driver exige, como a criação de uma lista lookaside ou a inicialização do rastreamento. Observe que, embora WdfDriverCreate retorne um identificador para o objeto WDFDRIVER, o driver não conserva esse identificador, assim como um driver WDM pode não conservar o ponteiro DRIVER_OBJECT que foi passado para a sua rotina DriverEntry. O motivo é o mesmo: apenas alguns drivers usam o ponteiro para o objeto driver.