次の方法で共有


IO_CSQ_REMOVE_IRP コールバック関数 (wdm.h)

CsqRemoveIrp ルーチンは、ドライバー実装のキャンセル セーフ IRP キューから指定された IRP を削除するためにシステムによって使用されます。

構文

IO_CSQ_REMOVE_IRP IoCsqRemoveIrp;

void IoCsqRemoveIrp(
  [in] PIO_CSQ Csq,
  [in] PIRP Irp
)
{...}

パラメーター

[in] Csq

キャンセル セーフな IRP キューの IO_CSQ 構造体へのポインター。

[in] Irp

IRP キューから削除する IRP へのポインター。

戻り値

何一つ

備考

ドライバーは、キューの IO_CSQ 構造体を初期化するときにキャンセル セーフ IRP キューの CsqRemoveIrp ルーチンを指定します。 ドライバーは、IoCsqInitializeCsqRemoveIrp パラメーターとしてルーチンを指定するか、IO_CSQ初期化するときに IoCsqInitializeEx します。 詳細については、「Cancel-Safe IRP キューの」を参照してください。

IoCsqRemoveIrp および IoCsqRemoveNextIrp ルーチンは、キャンセル セーフな IRP キューの CsqRemoveIrp ルーチンを呼び出して、指定した IRP をキューから削除します。 システムでは、CsqRemoveIrp を使用して、キャンセルされた IRP をキューから削除します。

CsqRemoveIrp コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数の種類のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。

たとえば、MyCsqRemoveIrpという名前の CsqRemoveIrp コールバック ルーチンを定義するには、次のコード例に示すようにIO_CSQ_REMOVE_IRP型を使用します。

IO_CSQ_REMOVE_IRP MyCsqRemoveIrp;

次に、次のようにコールバック ルーチンを実装します。

_Use_decl_annotations_
VOID 
 MyCsqRemoveIrp(
    PIO_CSQ  Csq,
    PIRP  Irp
    )
  {
      // Function body
  }

IO_CSQ_REMOVE_IRP関数の種類は、Wdm.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、_Use_decl_annotations_ 注釈を関数定義に追加してください。 _Use_decl_annotations_ 注釈を使用すると、ヘッダー ファイル内のIO_CSQ_REMOVE_IRP関数型に適用される注釈が使用されます。 関数宣言の要件の詳細については、「WDM ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。 _Use_decl_annotations_の詳細については、「関数の動作 に注釈を付けるを参照してください。

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)

関連項目

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp