Sdílet prostřednictvím


Portování DriverEntry

Ve WDM i frameworkových ovladačích je funkce DriverEntry primárním vstupním bodem. Prototyp funkce je stejný v obou modelech. V ovladači WDM systém volá DriverEntry při prvním načtení ovladače do paměti. DriverEntry nastaví ukazatel na rutinu AddDevice ovladače v poli DriverExtension->AddDevice struktury DRIVER_OBJECT, nastaví ukazatele na své vstupně-výstupní rutiny v poli MajorFunction struktury DRIVER_OBJECT, a poté se vrátí. V ovladači založeném na rozhraní systém volá interní funkci FxDriverEntry architektury při načítání ovladače. Tato interní funkce inicializuje architekturu a potom zavolá funkci DriverEntry ovladače. DriverEntry nastaví ukazatel na zpětné volání EvtDriverDeviceAdd ovladače a volá WdfDriverCreate pro vytvoření objektu WDFDRIVER, jak ukazuje následující příklad:

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 také inicializuje všechna globální data nebo prostředky, které ovladač vyžaduje, například vytvoření vyhledávacího seznamu nebo inicializace trasování. Všimněte si, že ačkoli WdfDriverCreate vrací popisovač k objektu WDFDRIVER, ovladač si tento popisovač neuchovává, stejně jako ovladač WDM nemusí uchovávat ukazatel DRIVER_OBJECT, který mu byl předán v jeho rutině DriverEntry. Důvod je stejný: pouze několik ovladačů používá ukazatel na objekt ovladače.