次の方法で共有


ExInitializeWorkItem 関数 (wdm.h)

ExInitializeWorkItem は、システム ワーカー スレッドに制御が与えられたときに、呼び出し元が指定したコンテキストとコールバック ルーチンを使用して、実行キューに格納される作業キュー項目を初期化します。

警告

このルーチンは細心の注意を払って使用してください。 後述の「解説」セクションを参照してください。

構文

VOID ExInitializeWorkItem(
  [in] PWORK_QUEUE_ITEM       Item,
  [in] PWORKER_THREAD_ROUTINE Routine,
  [in] PVOID                  Context
);

パラメーター

[in] Item

初期化する呼び出し元によって割り当てられたWORK_QUEUE_ITEM構造体へのポインター。 この構造体は、非ページ プールから割り当てる必要があります。 Routine パラメーターで指定されたコールバック ルーチンは、ExFreePool または ExFreePoolWithTag を呼び出すことによって、この作業項目 不要になったときにこの作業項目を解放する役割を担います。

[in] Routine

作業項目を処理するために呼び出される呼び出し元定義ルーチンへのポインター。 このルーチンは、IRQL PASSIVE_LEVELのシステム スレッドのコンテキストで呼び出されます。 このルーチンは、次のように宣言されます。

VOID
(*PWORKER_THREAD_ROUTINE)(
    IN PVOID Parameter
    );

パラメーター

Context パラメーターで渡されたコンテキスト情報ポインター。

[in] Context

Routine パラメーターで指定されたコールバック ルーチンに渡される呼び出し元が指定したコンテキスト情報へのポインター。

戻り値

何一つ

備考

ExInitializeWorkItem は、指定されたコールバック ルーチンとコンテキスト ポインターを使用して作業項目を初期化し、NULL リスト ポインターを します。

作業項目をシステム作業キューに追加するには、ExQueueWorkItem 呼び出します。

作業項目は限られたリソースであり、ドライバーは必要に応じてのみ割り当てる必要があります。 たとえば、DriverEntry の作業項目 ドライバー専用に割り当てないでください。

ExInitializeWorkItem および ExQueueWorkItem は、指定した作業項目がデバイス オブジェクトまたはデバイス スタックに関連付けられていない場合にのみ使用できます。 その他のすべての場合、ドライバーでは、IoAllocateWorkItem 、IoFreeWorkItem 、および IoQueueWorkItem 使用する必要があります。これは、指定された作業項目に関連付けられているデバイス オブジェクトが作業項目が処理されるまで確実に残るためです。

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー wdm.h (FltKernel.h、Ntifs.h、Ntddk.h、Wdm.h を含む)
IRQL 任意のレベル

関連項目

ExFreePool

ExFreePoolWithTag する

ExQueueWorkItem する

IoAllocateWorkItem

IoFreeWorkItem

IoQueueWorkItem

WORK_QUEUE_ITEM