Freigeben über


GPIO_CLIENT_RELEASE_CONTROLLER Rückruffunktion (gpioclx.h)

Die CLIENT_ReleaseController Ereignisrückruffunktion führt Vorgänge aus, die erforderlich sind, wenn auf das GpIO-Controllergerät (General Purpose E/O) nicht mehr zugegriffen werden kann.

Syntax

GPIO_CLIENT_RELEASE_CONTROLLER GpioClientReleaseController;

NTSTATUS GpioClientReleaseController(
  [in] WDFDEVICE Device,
  [in] PVOID Context
)
{...}

Parameter

[in] Device

Ein WDFDEVICE-Handle für das Frameworkgerätobjekt, das den GPIO-Controller darstellt.

[in] Context

Ein Zeiger auf den Gerätekontext des GPIO-Controllertreibers.

Rückgabewert

Die CLIENT_ReleaseController-Funktion gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Andernfalls wird ein entsprechender Fehlercode zurückgegeben.

Hinweise

Diese Rückruffunktion wird vom GPIO-Controllertreiber implementiert. Die GPIO-Frameworkerweiterung (GpioClx) ruft diese Funktion auf, nachdem auf das GPIO-Controllergerät nicht mehr zugegriffen werden kann.

Während des CLIENT_ReleaseController Rückrufs sollte der GPIO-Controllertreiber alle Hardwareressourcen freigeben, die er durch den vorherigen Aufruf der CLIENT_PrepareController Rückruffunktion erworben hat. Bei einem speicherseitig zugeordneten GPIO-Controllergerät sollte der Treiber die Zuordnung des Speicheradressbereichs bzw. der Bereiche aufheben, die den Hardwareregistern zugewiesen sind. Bei einem Controller, der nicht arbeitsspeicherseitig zugeordnet ist, sollte der Treiber die zuvor geöffnete logische Verbindung mit dem Controller schließen.

Um die CLIENT_ReleaseController Rückruffunktion Ihres Treibers zu registrieren, rufen Sie die GPIO_CLX_RegisterClient-Methode auf. Diese Methode akzeptiert als Eingabeparameter einen Zeiger auf eine GPIO_CLIENT_REGISTRATION_PACKET-Struktur , die einen CLIENT_ReleaseController Funktionszeiger enthält.

Obwohl die CLIENT_ReleaseController Rückruffunktion unter IRQL = PASSIVE_LEVEL aufgerufen wird, sollten Sie diese Funktion nicht auslagerungsfähig machen. Der CLIENT_ReleaseController Rückrufs befindet sich im wichtigen Zeitpfad für die Wiederherstellung der Stromversorgung der Geräte auf der Hardwareplattform und sollte aus Leistungsgründen nicht durch Seitenfehler verzögert werden.

Beispiele

Um eine CLIENT_ReleaseController Rückruffunktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückruffunktion angibt. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine CLIENT_ReleaseController Rückruffunktion namens MyEvtGpioReleaseControllerzu definieren, verwenden Sie den GPIO_CLIENT_RELEASE_CONTROLLER-Funktionstyp, wie in diesem Codebeispiel gezeigt:

GPIO_CLIENT_RELEASE_CONTROLLER  MyEvtGpioReleaseController;

Implementieren Sie dann Ihre Rückruffunktion wie folgt:

_Use_decl_annotations_
NTSTATUS
  MyEvtGpioReleaseController(
    WDFDEVICE Device,
    PVOID Context
)
{ ... }

Der GPIO_CLIENT_RELEASE_CONTROLLER Funktionstyp ist in der Headerdatei Gpioclx.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzu. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den GPIO_CLIENT_RELEASE_CONTROLLER Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für KMDF-Treiber. Weitere Informationen zu Use_decl_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Wird ab Windows 8 unterstützt.
Zielplattform Desktop
Kopfzeile gpioclx.h
IRQL Wird bei PASSIVE_LEVEL aufgerufen.

Weitere Informationen

GPIO_CLIENT_REGISTRATION_PACKET

GPIO_CLX_RegisterClient