NDIS I/O 作業項目
ドライバーは、後で実行できるように I/O 作業項目コールバック関数をキューに入れることができます。 NDIS は、IRQL = PASSIVE_LEVEL でドライバー指定のコールバック関数を呼び出します。 これにより、現在の関数がすぐに値を返し、ドライバーが後でより低い IRQL で動作できるようにすることで、システムのパフォーマンスが向上します。
NDIS 6.0 以降は、カーネル I/O 作業項目ルーチン IoAllocateWorkItem、IoFreeWorkItem、IoQueueWorkItem のラッパー関数を提供します。 プライベート 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 が割り当てられた作業項目に関連付けられているリソースを解放する必要があります。