Erstellen eines Hardwarebenachrichtigungsclienttreibers
Dieser Abschnitt enthält allgemeine Anleitungen zur Entwicklung eines Hardwarebenachrichtigungsclienttreibers, der die von Microsoft bereitgestellte KMDF-Klassenerweiterung verwendet.
Erstellen Sie eine Datei für Ihre Clienttreiberimplementierung, die mit Mshwnclxstub.lib verknüpft ist und die Header hwn.h und hwnclx.h enthält.
Definieren Sie Instanzen der erforderlichen Rückruffunktionen für KMDF- und Hardwarebenachrichtigungsklassenerweiterungen. Insbesondere müssen Sie diese Rückruffunktionen implementieren und registrieren, wie im folgenden Beispielcode gezeigt.
DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD HwnClientEvtDeviceAdd; HWN_CLIENT_INITIALIZE_DEVICE HwnClientInitializeDevice; HWN_CLIENT_UNINITIALIZE_DEVICE HwnClientUnInitializeDevice; HWN_CLIENT_QUERY_DEVICE_INFORMATION HwnClientQueryDeviceInformation; HWN_CLIENT_START_DEVICE HwnClientStartDevice; HWN_CLIENT_STOP_DEVICE HwnClientStopDevice; HWN_CLIENT_SET_STATE HwnClientSetState; HWN_CLIENT_GET_STATE HwnClientGetState;
Implementieren Sie die DriverEntry-Routine , bei der es sich um den Einstiegspunkt des Clienttreibers handelt, der für die Initialisierung verantwortlich ist. Für den Hardwarebenachrichtigungsclienttreiber sollte diese Funktion Folgendes behandeln:
Das Aufrufen WDF_DRIVER_CONFIG_INIT , um die WDF_DRIVER_CONFIG Struktur des Treibers zu initialisieren.
Aufrufen von WdfDriverCreate , um ein Frameworktreiberobjekt für den Clienttreiber zu erstellen.
Definieren des Inhalts der HWN_CLIENT_REGISTRATION_PACKET, einschließlich der Rückruffunktionszeiger für die Verwendung durch die Klassenerweiterung. Weitere Informationen zu den erforderlichen Rückruffunktionen finden Sie unter Referenz zu Hardwarebenachrichtigungen.
Aufrufen von HwNRegisterClient , um den Clienttreiber mit der Klassenerweiterung zu registrieren.
Implementieren Sie die EVT_WDF_DRIVER_DEVICE_ADD-Funktion , die für die Durchführung von Geräteinitialisierungsvorgängen verantwortlich ist, wenn der PnP-Manager das Vorhandensein eines Geräts meldet. Für den Hardwarebenachrichtigungsclienttreiber sollte diese Funktion Folgendes behandeln:
Aufrufen von HwNProcessAddDevicePreDeviceCreate, der das Gerät zum Vorbereiten/Freigeben und Ein-/Beenden von Rückrufen bereitstellt, die vom KMDF zum Übergang des Geräts in unterschiedliche Zustände benötigt werden.
Aufrufen von WdfDeviceCreate , um ein Framework-Geräteobjekt zu erstellen.
Aufrufen von HwNProcessAddDevicePostDeviceCreate , um E/A-Warteschlangen zu erstellen.
Implementieren Sie die definierte HWN_CLIENT_INITIALIZE_DEVICE-Funktion , die von der Klassenerweiterung aufgerufen wird, um den Hardwarebenachrichtigungscontroller für die Verwendung vorzubereiten.
Implementieren Sie die definierte HWN_CLIENT_UNINITIALIZE_DEVICE-Funktion , die von der Klassenerweiterung aufgerufen wird, um den Hardwarebenachrichtigungscontroller zu initialisieren.
Implementieren Sie die definierte HWN_CLIENT_QUERY_DEVICE_INFORMATION-Funktion , die von der Klassenerweiterung aufgerufen wird. Diese Funktion ist für das Abrufen der Attribute einer Hardwarebenachrichtigungskomponente verantwortlich.
Implementieren Sie die definierte HWN_CLIENT_START_DEVICE-Funktion , die von der Klassenerweiterung aufgerufen wird. Diese Funktion ist für das Starten des Hardwarebenachrichtigungscontrollers und die Zuweisung von ACPI-Ressourcen für den Clienttreiber verantwortlich.
Implementieren Sie die definierte HWN_CLIENT_STOP_DEVICE-Funktion , die von der Klassenerweiterung aufgerufen wird. Diese Funktion ist für das Beenden des Hardwarebenachrichtigungscontrollers und das Freigeben von ACPI-Ressourcen verantwortlich, die vom Clienttreiber verwendet werden.
Implementieren Sie die definierte HWN_CLIENT_SET_STATE, die von der Klassenerweiterung aufgerufen wird. Diese Funktion ist für das Festlegen von Hardwarebenachrichtigungskomponentenzuständen verantwortlich.
Implementieren Sie die definierte HWN_CLIENT_GET_STATE, die von der Klassenerweiterung aufgerufen wird. Diese Funktion ist für das Abrufen der aktuellen Werte der Hardwarebenachrichtigungskomponenten verantwortlich. Wenn der Eingabepuffer NULL ist, was bedeutet, dass der Benutzer den spezifischen Hardwarebenachrichtigungsstatus nicht angegeben hat, sollte diese Funktion Zustandsinformationen für alle Hardwarebenachrichtigungskomponenten zurückgeben.