Freigeben über


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 MyIoTimerzu 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").