NdisScheduleWorkItem 関数 (ndis.h)
注 NDIS 5 です。 x は非推奨となり、NDIS 6 に置き換えられます。 x をします。 新しい NDIS ドライバーの開発については、「Windows Vista 以降のネットワーク ドライバーを参照してください。 NDIS 5 の移植に関する情報。 NDIS 6 に x ドライバーを します。 x、NDIS 6.0 に NDIS 5.x ドライバーを移植するを参照してください。
NdisScheduleWorkItem は、システム ワーカー スレッドが項目を削除するキューに特定の作業項目を挿入し、以前にドライバーが NdisInitializeWorkItemに渡したコールバック関数制御します。
構文
NDIS_STATUS NdisScheduleWorkItem(
[in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);
パラメーター
[in] WorkItem
NdisInitializeWorkItemの前の呼び出しによって設定された作業項目へのポインター。
戻り値
NdisScheduleWorkItem は常に成功するため、常にNDIS_STATUS_SUCCESSを返します。
備考
NdisScheduleWorkItem 呼び出すと、NDIS ドライバーは、ワーカー スレッドコールバック関数に現在実行されている発生した IRQL よりも低い IRQL で実行できる、または実行する必要があるドライバーによって決定された操作を延期できます。
ドライバーのコールバックは、IRQL = PASSIVE_LEVEL後でシステム スレッド コンテキスト内で実行されます。 この呼び出し元から提供される関数は、ドライバーが WorkItem に割り当てた記憶域再利用します。 たとえば、NdisInitializeWorkItem をするコンテキスト領域を提供するために、ドライバー NdisAllocateMemoryWithTag を呼び出した場合、そのコールバック関数は、コントロールを返す前に、WorkItem を使用して NdisFreeMemory を する逆呼び出しを行う必要があります。
ドライバーは、1 つの同期オブジェクトを既に保持していて、別の同期オブジェクトを取得しようとする可能性がある場合、そのコールバック ルーチンが操作を完了するのを待つ必要はありません。 たとえば、NDIS ドライバーは、NdisScheduleWorkItem 呼び出す前に、現在保持されているスピン ロックなどを解放する必要があります。 最高レベルの NDIS プロトコル ドライバーは、NdisScheduleWorkItem を呼び出す前に、現在保持されているセマフォ、ミューテックス、リソース変数などを解放必要があります。 同期ワーカー スレッド操作をキューに格納する前にすべての同期リソースを解放すると、デッドロックが回避されます。
シリアル化されたミニポート ドライバーは、ワーカー スレッド コールバック ルーチンをキューに登録しないでください。このようなドライバーが NIC コンテキスト領域へのアクセスをワーカー スレッド コールバックと同期する方法がないためです。 したがって、このようなシリアル化された NDIS ドライバーは、断続的なシステム クラッシュを引き起こすことなく、ワーカー スレッドコールバック関数を使用してアダプターごとのコンテキスト領域で何も共有できません。
- ターゲット プラットフォーム: ユニバーサル
- バージョン: Windows Vista の NDIS 6.0 ドライバーではサポートされていません。 代わりに、NdisQueueIoWorkItem使用してください。 Windows Vista および Windows XP の NDIS 5.1 ドライバーでサポートされています。
必要条件
要件 | 価値 |
---|---|
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | IRQL <= DISPATCH_LEVEL |