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 を使用する必要があります。これは、これらのルーチンによってのみ、指定された作業項目に関連付けられているデバイス オブジェクトが、作業項目が処理されるまで使用可能なままになります。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | wdm.h (FltKernel.h、Ntifs.h、Ntddk.h、Wdm.h を含む) |
IRQL | 任意のレベル |