Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ab Windows 8.1 steht ein umfassender Satz von ExXxxTimer Routinen zum Verwalten von Zeitgebern zur Verfügung. Diese Routinen verwenden Zeitgeberobjekte, die auf der EX_TIMER Struktur basieren. Die ExXxxTimer Routinen sind Ersatz für die KeXxxTimer Routinen, die ab Windows 2000 verfügbar sind. Treiber, die nur unter Windows 8.1 und höheren Versionen von Windows ausgeführt werden sollen, können die ExXxxTimer- Routinen anstelle der KeXxxTimer Routinen verwenden. Windows 8.1 und höhere Versionen von Windows unterstützen weiterhin die KeXxxTimer Routinen.
Die ExXxxTimer Routinen verfügen über alle wichtigen Funktionen, die von den KeXxxTimer Routinen bereitgestellt werden. Darüber hinaus unterstützen die ExXxxTimer Routinen zwei Timertypen, hochauflösende Zeitgeber und no-wakers, die von den KeXxxTimer Routinen nicht unterstützt werden. Zeitgeber mit hoher Auflösung sind Zeitgeber, deren Ablaufzeiten mit höherer Genauigkeit angegeben werden können als zeitgeber, deren Genauigkeit durch die Standardauflösung der Systemuhr begrenzt ist. No-Wake-Timer sind Timer, die unnötiges Aufwachen von Prozessoren aus Energiesparzuständen vermeiden. Weitere Informationen finden Sie in den folgenden Themen:
Ab Windows 8.1 sind die folgenden ExXxxTimer--Routinen verfügbar:
Die ExSetTimer Routine kann anstelle der KeSetTimer oder KeSetTimerEx Routine verwendet werden. Die ExCancelTimer Routine kann anstelle der KeCancelTimer Routine verwendet werden.
Die ExAllocateTimer und ExDeleteTimer Routinen haben keine direkten KeXxxTimer Gegenstücken. Diese beiden Routinen weisen ein Timerobjekt zu und geben es frei. Dieses Timerobjekt ist eine vom System zugewiesene EX_TIMER Struktur, deren Member für Treiber undurchsichtig sind. Im Gegensatz dazu ist das zeitgeberobjekt, das vom KeXxxTimer- Routinen verwendet wird, ein treibergeteilter KTIMER- Struktur. Der Treiber ruft die KeInitializeTimer- oder KeInitializeTimerEx- Routine auf, um dieses Objekt zu initialisieren. ExAllocateTimer initialisiert die zugeordneten Timerobjekte. Weitere Informationen zu ExDeleteTimer-finden Sie unter Löschen eines System-Allocated Timerobjekts.
EX_TIMER- und KTIMER- Strukturen sind wartebare Objekte. Nachdem ein Treiber ExSetTimer-, KeSetTimer-oder KeSetTimerEx aufruft, um einen Timer festzulegen, kann der Treiber eine Routine wie KeWaitForSingleObject oder KeWaitForMultipleObject s aufrufen, um zu warten, bis der Zeitgeber abläuft. Das Timerobjekt wird signalisiert, wenn der Timer abläuft. Als Option kann ein Treiber einen Zeiger auf einen treiber implementierten ExTimerCallback- oder CustomTimerDpc Rückrufroutine bereitstellen, die das Betriebssystem nach Ablauf des Timers aufruft.
Die KeXxxTimer Routinen verfügen über zwei Funktionen, die nicht von den ExXxxTimer Routinen bereitgestellt werden, aber diese Funktionen werden von den meisten Treibern nicht benötigt.
Zunächst wird die KTIMER- Struktur, die von der KeXxxTimer- Routinen als Zeitgeberobjekt verwendet wird, treibergeteilt. Der Treiber kann dieses Objekt vorab zuordnen, um sicherzustellen, dass das Objekt auch unter Umständen verfügbar ist, in denen Ressourcen eingeschränkt sind und Speicherzuweisungen fehlschlagen können. Im Gegensatz dazu kann ein Aufruf von ExAllocateTimer zum Zuordnen eines Timerobjekts in einer ressourcengeschränkten Umgebung fehlschlagen. Allerdings müssen nur wenige Treiber für die Ausführung in Umgebungen entwickelt werden, in denen Speicherzuweisungen fehlschlagen, und die meisten Treiber profitieren von der Bequemlichkeit einer ExAllocateTimer Routine, die sowohl ein Timerobjekt zuweist als auch initialisiert.
Zweitens gibt es keine ExXxxTimer Äquivalent der KeReadStateTimer Routine, die angibt, ob sich ein Timerobjekt im signalierten Zustand befindet. Diese Routine wird jedoch selten verwendet. Bei Bedarf kann ein Treiber, der die ExXxxTimer Routinen verwendet, überprüfen, ob sich ein Timerobjekt im signalierten Zustand befindet, indem ein boolescher Wert gelesen wird, der von der ExTimerCallback- Rückrufroutine festgelegt wird, die der Treiber der ExAllocateTimer Routine bereitstellt.