KsAddIrpToCancelableQueue 関数 (ks.h)
KsAddIrpToCancelableQueue 関数は、取り消し可能な IRP のキューに IRP を追加し、IRP を取り消せるようにします。 IRP が以前に取り消された状態に設定されていた場合、 KsAddIrpToCancelableQueue 関数は、その IRP のキャンセルを完了します。
構文
KSDDKAPI VOID KsAddIrpToCancelableQueue(
[in, out] PLIST_ENTRY QueueHead,
[in] PKSPIN_LOCK SpinLock,
[in] PIRP Irp,
[in] KSLIST_ENTRY_LOCATION ListLocation,
[in, optional] PDRIVER_CANCEL DriverCancel
);
パラメーター
[in, out] QueueHead
IRP を追加するキューの先頭にドライバーによって割り当てられた記憶域を指定します。
[in] SpinLock
QueueHead で指定されたキューへのキュー アクセスのドライバーのスピン ロックをポイントします。 このポインターのコピーは、必要に応じてキャンセル ルーチンで使用するために、IRP のKSQUEUE_SPINLOCK_IRP_STORAGE (Irp) に保持されます。
[in] Irp
QueueHead で指定されたキューに追加する IRP を指定します。
[in] ListLocation
この IRP をキューの先頭または末尾に配置する必要があるかどうかを示します。 この値は、KsListEntryTail または KsListEntryHead である必要があります。
[in, optional] DriverCancel
使用するドライバー指定のキャンセル ルーチンを指定する省略可能なパラメーター。 これが NULL の場合、標準の KsCancelRoutine が使用されます。
戻り値
なし
解説
このルーチンが呼び出されたときに IRP がキャンセル状態になった場合、 KsAddIrpToCancelableQueue は 、DriverCancel で指定されたキャンセル ルーチンを直ちに呼び出すか、 DriverCancel でルーチンが指定されていない場合は、既定のストリーミングキャンセル ルーチンが呼び出されます。
KsAddIrpToCancelableQueue 関数を使用すると、取り消しリストに配置される前や、リスト間で移動される前でも、IRP を取り消すことができます。 この関数は、ドライバーによって割り当てられたキューとキュー内のすべてのエントリがシステム常駐であるか、常駐ストレージから割り当てられている場合を除き、IRQ レベルのDISPATCH_LEVEL以下で呼び出すことができます。
関数は、リストに項目を追加するためにキャンセル スピン ロックを使用しません。 リストへのアクセスは、指定されたスピン ロックを使用して同期され、Irp-CancelRoutine> のアトミック操作に依存します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | ks.h (Ks.h を含む) |
Library | Ks.lib |