GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT Rückruffunktion (gpioclx.h)
Die CLIENT_PreProcessControllerInterrupt Ereignisrückruffunktion führt jede Vorverarbeitung eines allgemeinen I/O-Interrupts (GPIO) durch, der sofort ausgeführt werden muss, wenn der ISR zu einem späteren Zeitpunkt ausgeführt werden soll.
Syntax
GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT GpioClientPreProcessControllerInterrupt;
NTSTATUS GpioClientPreProcessControllerInterrupt(
[in] PVOID Context,
[in] BANK_ID BankId,
ULONG64 EnabledMask
)
{...}
Parameter
[in] Context
Ein Zeiger auf den Gerätekontext des GPIO-Controllertreibers.
[in] BankId
Die Bank, die den unterbrechenden GPIO-Pin enthält. Wenn N die Anzahl der Banken im GPIO-Controller ist, ist BankId eine ganze Zahl im Bereich 0 bis N-1. Die GPIO-Framework-Erweiterung hat zuvor die Anzahl der Banken im Controller aus der CLIENT_QueryControllerBasicInformation Ereignisrückruffunktion erhalten. Weitere Informationen finden Sie in den Hinweisen in CLIENT_CONTROLLER_BASIC_INFORMATION.
EnabledMask
Rückgabewert
Die CLIENT_PreProcessControllerInterrupt-Funktion gibt STATUS_SUCCESS zurück, wenn der Aufruf erfolgreich ist. Andernfalls wird ein entsprechender Fehlercode zurückgegeben.
Bemerkungen
Diese Rückruffunktion ist optional. Ein GPIO-Controllertreiber implementiert diese Funktion nur, wenn er den größten Teil der Unterbrechungsbehandlung bei PASSIVE_LEVEL ausführt, aber eine anfängliche Verarbeitung eines Interrupts bei DIRQL durchführen muss.
In der Regel kann ein GPIO-Controllertreiber auf einen speicherzuordnungen GPIO-Controller bei DIRQL zugreifen, jedoch nur auf einen serial angeschlossenen GPIO-Controller auf PASSIVE_LEVEL zugreifen. Einige serial angeschlossene GPIO-Controller verlieren jedoch möglicherweise Unterbrechungsstatusdaten, wenn sie die Erfassung der Unterbrechungsstatusbits verzögern, bis die IRQL auf PASSIVE_LEVEL fällt. Wenn die IRQL später auf PASSIVE_LEVEL fällt, kann die GPIO-Frameworkerweiterung (GpioClx) die CLIENT_QueryActiveInterrupts Rückruffunktion des Treibers aufrufen, um den Registerinhalt abzurufen.
Der GPIO-Controllertreiber gibt an, ob er Unterbrechungen bei PASSIVE_LEVEL in den Geräteinformationen verarbeiten muss, die er während des CLIENT_QueryControllerBasicInformation Rückrufs an GpioClx übergibt. Wenn der GPIO-Controller im Arbeitsspeicher zugeordnet ist, sodass der Treiber auf die Register des Controllers bei DIRQL zugreifen kann, legt der Treiber das MemoryMappedController Flagbit im Flags Member der CLIENT_CONTROLLER_BASIC_INFORMATION Struktur fest, die der Treiber an GpioClx übergibt. Andernfalls legt der Treiber MemoryMappedController = 0 fest, um anzugeben, dass der Treiber Unterbrechungen bei PASSIVE_LEVEL verarbeiten muss. Weitere Informationen finden Sie unter Passive-Level ISRs.
Rufen Sie die GPIO_CLX_RegisterClient Methode auf, um die CLIENT_PreProcessControllerInterrupt Rückruffunktion ihres Treibers zu registrieren. Diese Methode akzeptiert als Eingabeparameter einen Zeiger auf eine GPIO_CLIENT_REGISTRATION_PACKET Struktur, die einen CLIENT_PreProcessControllerInterrupt Funktionszeiger enthält.
Beispiele
Um eine CLIENT_PreProcessControllerInterrupt Rückruffunktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückruffunktion identifiziert, die Sie definieren. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.
Um beispielsweise eine CLIENT_PreProcessControllerInterrupt Rückruffunktion zu definieren, die MyEvtGpioPreProcessInterrupt
benannt ist, verwenden Sie den funktionstyp GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT, wie in diesem Codebeispiel gezeigt:
GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT MyEvtGpioPreProcessInterrupt;
Implementieren Sie dann die Rückruffunktion wie folgt:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioPreProcessInterrupt(
PVOID Context
)
{ ... }
Der GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT Funktionstyp wird in der Headerdatei "Gpioclx.h" definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT in der Headerdatei angewendet werden, verwendet 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_annotationsfinden Sie unter Annotating Function Behavior.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Wird ab Windows 8 unterstützt. |
Zielplattform- | Desktop |
Header- | gpioclx.h |
IRQL- | Aufgerufen bei DIRQL. |