NDIS I/O 作業項目

ドライバーは、後で実行できるように I/O 作業項目コールバック関数をキューに入れることができます。 NDIS は、IRQL = PASSIVE_LEVEL でドライバー指定のコールバック関数を呼び出します。 これにより、現在の関数がすぐに値を返し、ドライバーが後でより低い IRQL で動作できるようにすることで、システムのパフォーマンスが向上します。

NDIS 6.0 以降は、カーネル I/O 作業項目ルーチン IoAllocateWorkItemIoFreeWorkItemIoQueueWorkItem のラッパー関数を提供します。 プライベート IO_WORKITEM 構造の代わりに、NDIS はプライベート NDIS_IO_WORKITEM 構造を使用します。

NDIS 6.0 ドライバーは、NdisAllocateIoWorkItem 関数を呼び出して作業項目を割り当てます。 NDIS ミニポート ドライバーは、NDIS が MiniportInitializeEx 関数に渡した NdisAllocateIoWorkItem アダプター ハンドルを渡します。 NdisAllocateIoWorkItem は、ハンドルに関連付けられているデバイス オブジェクトを取得し、デバイス オブジェクトを IoAllocateWorkItem ルーチンに渡します。 フィルター ドライバーは、フィルター ハンドルを渡します。

NDIS はプロトコル ドライバーをデバイス オブジェクトに関連付けないため、プロトコル ドライバーは NdisAllocateIoWorkItem を使用することができません。

NDIS ドライバーは、NdisQueueIoWorkItem 関数を呼び出して、作業項目をキューに入れます。 NDIS 作業項目は、CriticalWorkQueue キューの種類を使用します。

NDIS ドライバーは、NdisFreeIoWorkItem 関数を呼び出して、NdisAllocateIoWorkItem が割り当てられた作業項目に関連付けられているリソースを解放する必要があります。

システム ワーカー スレッド