KeCancelTimer-Funktion (wdm.h)
Die KeCancelTimer-Routine entfernt ein Timerobjekt, bevor das Zeitgeberintervall abläuft, sofern festgelegt.
Syntax
BOOLEAN KeCancelTimer(
[in, out] PKTIMER unnamedParam1
);
Parameter
[in, out] unnamedParam1
Zeiger auf ein initialisiertes Timerobjekt, für das der Aufrufer den Speicher bereitstellt.
Rückgabewert
Wenn sich das angegebene Timerobjekt in der Systemtimerwarteschlange befindet, gibt KeCancelTimerTRUE zurück.
Hinweise
Wenn sich das Timerobjekt derzeit in der Systemtimerwarteschlange befindet, wird es aus der Warteschlange entfernt. Wenn dem Timer ein DPC-Objekt zugeordnet ist, wird es ebenfalls abgebrochen. Andernfalls wird kein Vorgang ausgeführt.
Die Routine gibt TRUE zurück, wenn sich der Timer noch in der Timerwarteschlange befindet. Ein nichtperiodischer Timer wird aus der Systemwarteschlange entfernt, sobald er abläuft. Daher gibt KeCancelTimer für nichtperiodische Timer FALSE zurück, wenn der Timer-DPC in die Warteschlange gestellt wurde. Regelmäßige Timer befinden sich immer in der Zeitgeberwarteschlange, sodass KeCancelTimer für regelmäßige Zeitgeber immer TRUE zurückgibt.
Beachten Sie, dass ein DPC, der bereits ausgeführt wird, bis zum Abschluss ausgeführt wird. Der Treiber muss sicherstellen, dass der DPC abgeschlossen wurde, bevor die vom DPC verwendeten Ressourcen freigegeben werden. Für einen nichtperiodischen Timer können Sie Synchronisierungsgrundtypen wie Ereignisobjekte verwenden, um zwischen dem Treiber und dem DPC zu synchronisieren. Der Treiber kann den Rückgabecode von KeCancelTimer überprüfen, um zu bestimmen, ob der DPC ausgeführt wird. Wenn dies der Fall ist, kann der DPC das Ereignis vor dem Beenden signalisieren, und der Treiber kann warten, bis dieses Ereignis auf den nicht signalierten Zustand zurückgesetzt wird.
Da KeCancelTimer für periodische Zeitgeber immer TRUE zurückgibt, müssen Treiber eine andere Technik verwenden, um zu warten, bis der DPC abgeschlossen ist. Verwenden Sie die KeFlushQueuedDpcs-Routine , um zu blockieren, bis der DPC ausgeführt wird.
Treiber müssen für Daten, die in globalen Variablen oder Treiberobjekterweiterungen gespeichert sind, nicht synchronisiert werden. Das System ruft automatisch KeFlushQueuedDpcs auf, bevor die Zuordnung einer dieser Regionen aufgehoben wird.
Weitere Informationen zu Timerobjekten finden Sie unter Timerobjekte und DPCs.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Verfügbar ab Windows 2000. |
Zielplattform | Universell |
Header | wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothek | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport), IrqlKeDispatchLte(wdm) |