IO_WORKITEM_ROUTINE_EX コールバック関数 (wdm.h)
WorkItemEx ルーチンは、IoQueueWorkItemEx ルーチンまたは IoTryQueueWorkItem ルーチンによってキューに登録された作業項目の処理を実行します。
構文
IO_WORKITEM_ROUTINE_EX IoWorkitemRoutineEx;
void IoWorkitemRoutineEx(
[in] PVOID IoObject,
[in, optional] PVOID Context,
[in] PIO_WORKITEM IoWorkItem
)
{...}
パラメーター
[in] IoObject
呼び出し元のドライバー オブジェクトまたは呼び出し元のデバイス オブジェクトへのポインター。 これは、作業項目が割り当てられたときに DeviceObject パラメーターとして IoAllocateWorkItem に渡されたポインター、または作業項目が初期化されたときに IoInitializeWorkItem または IoTryQueueWorkItem に IoObject パラメーターとして渡されたポインターです。
[in, optional] Context
ドライバー固有のコンテキスト情報を指定します。 これは、作業項目がキューに登録されたときに 、Context パラメーターとして IoQueueWorkItemEx または IoTryQueueWorkItem に渡された値です。
[in] IoWorkItem
作業項目の IO_WORKITEM 構造体へのポインター。 これは、 IoWorkItem パラメーターとして IoQueueWorkItemEx または IoTryQueueWorkItem に渡されたポインター です。
戻り値
なし
解説
ドライバーは、Windows Vista 以降のバージョンの Windows でのみ WorkItemEx ルーチンを実装できます。
ドライバーは、IoQueueWorkItemEx または IoTryQueueWorkItem を呼び出すことによって WorkItemEx ルーチンをキューに入れ、システム ワーカー スレッドはその後、ルーチンを実行します。 詳細については、「 システム ワーカー スレッド」を参照してください。
WorkItemEx ルーチンは、限られた時間実行する必要があります。それ以外の場合、システムはデッドロックを発生させることができます。 詳細については、「 システム ワーカー スレッド」を参照してください。
WorkItemEx ルーチンは、IRQL = PASSIVE_LEVELおよびシステム スレッド コンテキストで実行されます。
例
WorkItemEx コールバック ルーチンを定義するには、まず、定義するコールバック ルーチンの種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバーのコールバック関数型のセットが用意されています。 コールバック関数の種類を使用して関数を宣言すると、 ドライバーのコード分析、 静的ドライバー検証ツール (SDV)、およびその他の検証ツールでエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。
たとえば、 という名前MyWorkItemEx
の WorkItemEx コールバック ルーチンを定義するには、次のコード例に示すように、IO_WORKITEM_ROUTINE_EX型を使用します。
IO_WORKITEM_ROUTINE_EX MyWorkItemEx;
次に、コールバック ルーチンを次のように実装します。
_Use_decl_annotations_
VOID
MyWorkItemEx(
PVOID IoObject,
PVOID Context,
PIO_WORKITEM IoWorkItem
)
{
// Function body
}
IO_WORKITEM_ROUTINE_EX関数の種類は、Wdm.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、必ず注釈を _Use_decl_annotations_
関数定義に追加してください。 注釈により _Use_decl_annotations_
、ヘッダー ファイル内のIO_WORKITEM_ROUTINE_EX関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「 WDM ドライバーの関数ロール型を使用して関数を宣言する」を参照してください。 の詳細 _Use_decl_annotations_
については、「 関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | デスクトップ |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
IRQL | PASSIVE_LEVELで呼び出されます。 |