Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
[Van toepassing op KMDF en UMDF]
DriverEntry is de eerste door het stuurprogramma geleverde routine die wordt aangeroepen nadat een stuurprogramma is geladen. Het is verantwoordelijk voor het initialiseren van het stuurprogramma.
Syntaxis
NTSTATUS DriverEntry(
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
);
Parameterwaarden
DriverObject [in]
Een aanwijzer naar een DRIVER_OBJECT structuur die het WDM-stuurprogrammaobject van het stuurprogramma vertegenwoordigt.
RegistryPath [in]
Een aanwijzer naar een UNICODE_STRING structuur waarmee het pad naar de sleutel Parameters van het stuurprogramma wordt opgegeven in het register.
Retourwaarde
Als de routine slaagt, moet deze STATUS_SUCCESS retourneren. Anders moet er een van de foutstatuswaarden worden geretourneerd die zijn gedefinieerd in ntstatus.h.
Opmerkingen
Net als alle WDM-stuurprogramma's moeten frameworkstuurprogramma's een DriverEntry routine hebben, die wordt aangeroepen nadat het stuurprogramma is geladen. Een op framework gebaseerde stuurprogramma's DriverEntry routine moet:
Activeer WPP-softwaretracering.
DriverEntry- moet een WPP_INIT_TRACING macro bevatten om softwaretracering te activeren.
Roep WdfDriverCreateaan.
De aanroep van WdfDriverCreate stelt het stuurprogramma in staat om Windows Driver Framework-interfaces te gebruiken. (Het stuurprogramma kan geen andere frameworkroutines aanroepen voordat WdfDriverCreate.)
Wijs eventuele niet-apparaatspecifieke systeembronnen en globale variabelen toe die mogelijk nodig zijn.
Normaal gesproken koppelen stuurprogramma's systeembronnen aan afzonderlijke apparaten. Daarom wijzen frameworkstuurprogramma's de meeste resources toe in een EvtDriverDeviceAdd callback, die wordt aangeroepen wanneer afzonderlijke apparaten worden gedetecteerd.
Omdat meerdere exemplaren van een UMDF-stuurprogramma kunnen worden gehost door afzonderlijke exemplaren van Wudfhost, is een globale variabele mogelijk niet beschikbaar voor alle exemplaren van een UMDF-stuurprogramma.
Stuurprogrammaspecifieke parameters ophalen uit het register.
Sommige stuurprogramma's verkrijgen parameters uit het register. Deze stuurprogramma's kunnen WdfDriverOpenParametersRegistryKey aanroepen om de registersleutel te openen die deze parameters bevat.
Geef een DriverEntry-retourwaarde op.
Opmerking een UMDF-stuurprogramma wordt uitgevoerd in een hostproces in de gebruikersmodus, terwijl een KMDF-stuurprogramma wordt uitgevoerd in de kernelmodus in een systeemproces. Het framework kan meerdere exemplaren van een UMDF-stuurprogramma laden in afzonderlijke exemplaren van het hostproces. Als gevolg hiervan:
- Het framework kan de DriverEntry-routine van een UMDF-stuurprogramma meerdere keren aanroepen als er exemplaren van het stuurprogramma in verschillende hostprocessen worden geladen. Het framework roept daarentegen slechts één keer de DriverEntry-routine van het KMDF-stuurprogramma aan.
- Als een UMDF-stuurprogramma een globale variabele maakt in de DriverEntry-routine, is de variabele mogelijk niet beschikbaar voor alle exemplaren van het stuurprogramma. Een globale variabele die een KMDF-stuurprogramma maakt in de DriverEntry-routine, is echter beschikbaar voor alle exemplaren van het stuurprogramma.
Zie Een WDF-stuurprogramma bouwen en ladenvoor meer informatie over wanneer een stuurprogramma DriverEntry wordt aangeroepen.
De DriverEntry routine wordt niet gedeclareerd in WDK-headers. Voor static Driver Verifier (SDV) en andere verificatiehulpprogramma's is mogelijk een declaratie vereist, zoals:
DRIVER_INITIALIZE MyDriverEntry;
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
// Function body
}
Voorbeelden
In het volgende codevoorbeeld ziet u de voorbeeldstuurprogramma's DriverEntry routine.
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
WDF_DRIVER_CONFIG config;
WDFDRIVER hDriver;
NTSTATUS status;
WDF_OBJECT_ATTRIBUTES attributes;
SERIAL_FIRMWARE_DATA driverDefaults;
//
// Initialize WPP tracing.
//
WPP_INIT_TRACING(
DriverObject,
RegistryPath
);
SerialDbgPrintEx(
TRACE_LEVEL_INFORMATION,
DBG_INIT,
"Serial Sample (WDF Version) - Built %s %s\n",
__DATE__, __TIME__
);
//
// Register a cleanup callback function (which calls WPP_CLEANUP)
// for the framework driver object. The framework will call
// the cleanup callback function when it deletes the driver object,
// before the driver is unloaded.
//
WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
attributes.EvtCleanupCallback = SerialEvtDriverContextCleanup;
WDF_DRIVER_CONFIG_INIT(
&config,
SerialEvtDeviceAdd
);
status = WdfDriverCreate(
DriverObject,
RegistryPath,
&attributes,
&config,
&hDriver
);
if (!NT_SUCCESS(status)) {
SerialDbgPrintEx(
TRACE_LEVEL_ERROR,
DBG_INIT,
"WdfDriverCreate failed with status 0x%x\n",
status
);
//
// Clean up tracing here because WdfDriverCreate failed.
//
WPP_CLEANUP(DriverObject);
return status;
}
//
// Call an internal routine to obtain registry values
// to use for all the devices that the driver
// controls, including whether or not to break on entry.
//
SerialGetConfigDefaults(
&driverDefaults,
hDriver
);
//
// Break on entry if requested bt registry value.
//
if (driverDefaults.ShouldBreakOnEntry) {
DbgBreakPoint();
}
return status;
}