GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION Rückruffunktion (gpioclx.h)
Die CLIENT_ControllerSpecificFunction Ereignisrückruffunktion führt einen Vorgang aus, der für einen bestimmten GPIO-Controller (Universelle E/A) spezifisch ist.
Syntax
GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION GpioClientControllerSpecificFunction;
NTSTATUS GpioClientControllerSpecificFunction(
[in] PVOID Context,
[in, out] PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{...}
Parameter
[in] Context
Ein Zeiger auf den Gerätekontext des GPIO-Controllertreibers.
[in, out] Parameters
Ein Zeiger auf eine GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS-Struktur , die die Eingabe- und Ausgabepuffer für den controllerspezifischen Vorgang enthält.
Rückgabewert
Die CLIENT_ControllerSpecificFunction-Funktion gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Mögliche Rückgabewerte sind die folgenden Fehlercodes.
Rückgabecode | Beschreibung |
---|---|
|
Der GPIO-Controller unterstützt den von den Eingabeparametern angegebenen Vorgang nicht. |
|
Die Größe des Eingabe- oder Ausgabepuffers ist zu klein. |
Hinweise
Optional kann ein GPIO-Controllertreiber IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION Anforderungen unterstützen. Dieser Typ der E/A-Steuerungsanforderung (IOCTL) führt controllerspezifische Vorgänge zum Nutzen von Peripheriegerätetreibern aus, die diese Vorgänge erfordern. Zur Unterstützung dieser IOCTL implementiert ein GPIO-Controllertreiber eine CLIENT_ControllerSpecificFunction-Funktion .
Die GPIO-Frameworkerweiterung (GpioClx) unterstützt die funktion CLIENT_ControllerSpecificFunction , um die spezifischen Anforderungen bestimmter Hardwareplattformen zu erfüllen. Typische GPIO-Controllertreiber implementieren diese Funktion nicht. Ein Peripheriegerätetreiber, der IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION Anforderungen verwendet, um einen hardwarespezifischen Vorgang auf einer Plattform auszuführen, riskiert den Verlust der Kompatibilität mit anderen Plattformen, die diesen Vorgang nicht unterstützen.
In der Regel programmiert die funktion CLIENT_ControllerSpecificFunction den GPIO-Controller, um einen hardwarespezifischen Vorgang für eine Gruppe von GPIO-Pins auszuführen. Die Eingabe- und Ausgabeparameter für diesen Vorgang werden vom Entwickler für den GPIO-Controllertreiber definiert. Nur ein Peripheriegerätetreiber, der die von einem GPIO-Controllertreiber implementierten bestimmten Vorgänge kennt, kann diese Vorgänge anfordern.
Wenn GpioClx eine IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION-Anforderung empfängt, wird überprüft, ob der GPIO-Controllertreiber eine CLIENT_ControllerSpecificFunction-Funktion implementiert hat. Wenn dies der Fall ist, kopiert GpioClx die Beschreibungen der Eingabe- und Ausgabepuffer aus der IOCTL in eine GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS-Struktur und übergibt einen Zeiger auf diese Struktur als Parameter an die funktion CLIENT_ControllerSpecificFunction . Wenn die Parameterwerte in der GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS-Struktur gültig sind, führt die Funktion den angeforderten Vorgang aus und gibt STATUS_SUCCESS zurück.
Wenn GpioClx eine IOCTL_GPIO_CONTROLLER_SPECIFIC_FUNCTION-Anforderung empfängt und der GPIO-Controllertreiber keine CLIENT_ControllerSpecificFunction-Funktion implementiert, schließt GpioClx die IOCTL mit fehlercode STATUS_NOT_IMPLEMENTED ab.
Beispiele
Um eine CLIENT_ControllerSpecificFunction Rückruffunktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückruffunktion identifiziert, die Sie definieren. 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 Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.
Um beispielsweise eine CLIENT_ControllerSpecificFunction Rückruffunktion mit dem Namen MyEvtGpioControllerSpecificFunction
zu definieren, verwenden Sie den Funktionstyp GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION, wie in diesem Codebeispiel gezeigt:
GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION MyEvtGpioControllerSpecificFunction;
Implementieren Sie dann Ihre Rückruffunktion wie folgt:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioControllerSpecificFunction(
PVOID Context,
PGPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION_PARAMETERS Parameters
)
{ ... }
Der GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION Funktionstyp ist in der Gpioclx.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, müssen Sie der Funktionsdefinition die anmerkung Use_decl_annotations hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den GPIO_CLIENT_CONTROLLER_SPECIFIC_FUNCTION 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 Annotating Function Behavior.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Unterstützt ab Windows 8. |
Zielplattform | Desktop |
Kopfzeile | gpioclx.h |
IRQL | Wird unter PASSIVE_LEVEL aufgerufen. |