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