IO_TIMER_ROUTINE Rückruffunktion (wdm.h)
Die IoTimer-Routine ist ein DPC, der bei Registrierung 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 von der AddDevice-Routine des Treibers erstellt wurde.
[in, optional] Context
Vom Aufrufer bereitgestellter Zeiger auf vom Treiber definierte Kontextinformationen, der in einem vorherigen Aufruf von IoInitializeTimer angegeben wurde.
Rückgabewert
Keine
Bemerkungen
Die IoTimer-Routine eines Treibers wird in einem DPC-Kontext unter IRQL = DISPATCH_LEVEL ausgeführt.
Ein Treiber kann jedem von ihnen erstellten Geräteobjekt eine IoTimer-Routine zuordnen. (Sie können eine einzelne IoTimer-Routine mit mehreren Geräteobjekten oder eine separate Routine mit jedem Geräteobjekt verwenden.) Um eine IoTimer-Routine zu registrieren, muss ein Treiber IoInitializeTimer aufrufen und die Adresse der IoTimer-Routine und einen Geräteobjektzeiger angeben.
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 IoStopTimer aufruft.
Weitere Informationen zu IoTimer-Routinen finden Sie unter IoTimer-Routinen.
Beispiele
Um eine IoTimer-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückrufroutine 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 IoTimer-Rückrufroutine mit dem Namen MyIoTimer
zu definieren, verwenden Sie den typ IO_TIMER_ROUTINE, 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 ist in der Wdm.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_
Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_
Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den IO_TIMER_ROUTINE 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 WDM-Treiber. Informationen zu _Use_decl_annotations_
finden Sie unter Verhalten von Funktionen mit Anmerkungen.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Desktop |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Wird bei DISPATCH_LEVEL aufgerufen (siehe Abschnitt "Hinweise"). |