次の方法で共有


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 または IoTryQueueWorkItemIoObject パラメーターとして渡されたポインターです。

[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 オペレーティング システムのドライバーを記述するための要件になります。

たとえば、 という名前MyWorkItemExWorkItemEx コールバック ルーチンを定義するには、次のコード例に示すように、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で呼び出されます。

こちらもご覧ください

IO_WORKITEM

IoInitializeWorkItem

IoQueueWorkItemEx

IoTryQueueWorkItem