KeCancelTimer 関数 (wdm.h)
KeCancelTimer ルーチンは、タイマー間隔が設定されている場合、期限切れになる前にタイマー オブジェクトをデキューします。
構文
BOOLEAN KeCancelTimer(
[in, out] PKTIMER unnamedParam1
);
パラメーター
[in, out] unnamedParam1
初期化されたタイマー オブジェクトへのポインター。呼び出し元がストレージを提供します。
戻り値
指定したタイマー オブジェクトがシステム タイマー キューにある場合、 KeCancelTimer は TRUE を返します。
注釈
タイマー オブジェクトが現在システム タイマー キューにある場合は、キューから削除されます。 DPC オブジェクトがタイマーに関連付けられている場合も取り消されます。 それ以外の場合は演算が実行されません。
タイマーがまだタイマー キューにある場合、ルーチンは TRUE を 返します。 非永続タイマーは、有効期限が切れるとすぐにシステム キューから削除されます。 したがって、非周期タイマーの場合、タイマー DPC がキューに入っている場合、 KeCancelTimer は FALSE を 返します。 定期的なタイマーは常にタイマー キュー内に存在するため、定期的なタイマーの 場合、KeCancelTimer は常に TRUE を 返します。
既に実行されている DPC は完了まで実行されることに注意してください。 ドライバーは、DPC によって使用されるリソースを解放する前に、DPC が完了したことを確認する必要があります。 非期間タイマーの場合は、イベント オブジェクトなどの同期プリミティブを使用して、ドライバーと DPC の間で同期できます。 ドライバーは、KeCancelTimer のリターン コードをチェックして、DPC が実行されているかどうかを判断できます。 その場合、DPC は終了する前にイベントを通知でき、ドライバーはそのイベントがシグナル状態にリセットされるのを待つことができます。
定期的なタイマーの 場合、KeCancelTimer は常に TRUE を返すので、ドライバーは別の手法を使用して DPC が完了するまで待機する必要があります。 KeFlushQueuedDpcs ルーチンを使用して、DPC が実行されるまでブロックします。
ドライバーは、グローバル変数またはドライバー オブジェクト拡張機能に格納されているデータに対して同期する必要はありません。 これらのリージョンの割り当てを解除する前 に、KeFlushQueuedDpcs が自動的に呼び出されます。
タイマー オブジェクトの詳細については、「タイマー オブジェクト と DPC」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 以降で使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm) |