GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT Rückruffunktion (gpioclx.h)
Die CLIENT_PreProcessControllerInterrupt Ereignisrückruffunktion führt jede Vorverarbeitung eines GPIO-Interrupts (Universelle E/A) durch, die sofort ausgeführt werden muss, wenn die AUSFÜHRUNG der ISR zu einem späteren Zeitpunkt geplant ist.
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 von 0 bis N–1. Die GPIO-Frameworkerweiterung hat zuvor die Anzahl der Banken im Controller über die CLIENT_QueryControllerBasicInformation Ereignisrückruffunktion abgerufen. Weitere Informationen finden Sie unter Hinweise 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 geeigneter Fehlercode zurückgegeben.
Hinweise
Diese Rückruffunktion ist optional. Ein GPIO-Controllertreiber implementiert diese Funktion nur, wenn er den größten Teil seiner Interruptbehandlung bei PASSIVE_LEVEL ausführt, aber eine Erstverarbeitung eines Interrupts bei DIRQL durchführen muss.
In der Regel kann ein GPIO-Controllertreiber bei DIRQL auf einen speicherseitig zugeordneten GPIO-Controller zugreifen, aber nur bei PASSIVE_LEVEL auf einen seriell verbundenen GPIO-Controller zugreifen. Einige seriell verbundene GPIO-Controller verlieren jedoch möglicherweise Interrupts status Daten, wenn sie die Erfassung des Interrupts status Bits verzögern, bis der IRQL auf PASSIVE_LEVEL. Wenn der 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 Interrupts an PASSIVE_LEVEL in den Geräteinformationen verarbeiten muss, die er während des CLIENT_QueryControllerBasicInformation Rückrufs an GpioClx übergibt. Wenn der GPIO-Controller arbeitsspeicherseitig zugeordnet ist, sodass der Treiber unter DIRQL auf die Register des Controllers zugreifen kann, legt der Treiber das Flagbit MemoryMappedController im Flags-Element 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 Interrupts bei PASSIVE_LEVEL verarbeiten muss. Weitere Informationen finden Sie unter ISRs auf passiver Ebene.
Um die CLIENT_PreProcessControllerInterrupt 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_PreProcessControllerInterrupt-Funktionszeiger enthält.
Beispiele
Um eine CLIENT_PreProcessControllerInterrupt 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_PreProcessControllerInterrupt Rückruffunktion namens MyEvtGpioPreProcessInterrupt
zu definieren, 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 Ihre Rückruffunktion wie folgt:
_Use_decl_annotations_
NTSTATUS
MyEvtGpioPreProcessInterrupt(
PVOID Context
)
{ ... }
Der GPIO_CLIENT_PRE_PROCESS_CONTROLLER_INTERRUPT 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_PRE_PROCESS_CONTROLLER_INTERRUPT 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 DIRQL aufgerufen. |