IO_TIMER_ROUTINE Rückruffunktion (wdm.h)
Die IoTimer- Routine ist ein DPC, der, falls registriert, einmal pro Sekunde aufgerufen wird.
Syntax
IO_TIMER_ROUTINE IoTimerRoutine;
void IoTimerRoutine(
[in] _DEVICE_OBJECT *DeviceObject,
[in, optional] PVOID Context
)
{...}
Parameter
[in] DeviceObject
Vom Aufrufer bereitgestellter Zeiger auf eine DEVICE_OBJECT Struktur. Dies ist das Geräteobjekt für das Zielgerät, das zuvor vom AddDevice Routine des Treibers erstellt wurde.
[in, optional] Context
Vom Aufrufer bereitgestellter Zeiger auf treiberdefinierte Kontextinformationen, die in einem vorherigen Aufruf von IoInitializeTimerangegeben wurden.
Rückgabewert
Nichts
Bemerkungen
Die IoTimer Routine eines Treibers wird in einem DPC-Kontext unter IRQL = DISPATCH_LEVEL ausgeführt.
Ein Treiber kann eine IoTimer- Routine jedem von ihr erstellten Geräteobjekt zuordnen. (Sie können eine einzelne IoTimer- Routine mit mehreren Geräteobjekten oder eine separate Routine für jedes Geräteobjekt verwenden.) Um eine IoTimer- Routine zu registrieren, muss ein Treiber IoInitializeTimer-aufrufen, wobei die Adresse der IoTimer Routine und ein Geräteobjektzeiger bereitgestellt wird.
Um eine IoTimer- Routine für die Ausführung in die Warteschlange zu stellen, muss eine Treiberroutine IoStartTimer-aufrufen. Das System ruft die IoTimer Routine einmal pro Sekunde auf, bis der Treiber IoStopTimeraufruft.
Weitere Informationen zu IoTimer Routinen finden Sie unter IoTimer Routines.
Beispiele
Um eine IoTimer- Rückrufroutine zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine identifiziert. 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 IoTimer- Rückrufroutine zu definieren, die MyIoTimer
benannt ist, verwenden Sie den IO_TIMER_ROUTINE Typ, wie in diesem Codebeispiel gezeigt:
IO_TIMER_ROUTINE MyIoTimer;
Implementieren Sie dann Ihre Rückrufroutine wie folgt:
_Use_decl_annotations_
VOID
MyIoTimer(
struct DEVICE_OBJECT *DeviceObject,
PVOID Context
)
{
// Function body
}
Der IO_TIMER_ROUTINE Funktionstyp wird in der Wdm.h-Headerdatei 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 IO_TIMER_ROUTINE 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 WDM-Treiber. Informationen zu _Use_decl_annotations_
finden Sie unter Annotating Function Behavior.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL- | Aufgerufen bei DISPATCH_LEVEL (siehe Abschnitt "Hinweise"). |