ミニポート ドライバーは、ドライバーが割り込みを登録する NdisMRegisterInterruptEx 関数を呼び出す場合は、ミニポートInterruptDPC 関数を提供する必要があります。
構文
MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;
VOID MiniportInterruptDpc(
[in] NDIS_HANDLE MiniportInterruptContext,
[in] PVOID MiniportDpcContext,
[in] PVOID ReceiveThrottleParameters,
[in] PVOID NdisReserved2
)
{...}
パラメーター
[in] MiniportInterruptContext
割り込みコンテキスト情報のブロックへのハンドル。 ミニポート ドライバーは、ミニポート ドライバーが に渡されたパラメーター ミニポートInterruptContext でこのハンドルを提供しましたNdisMRegisterInterruptEx 関数を します。
[in] MiniportDpcContext
ミニポート ドライバーが NdisMQueueDpcEx または ndisMQueueDpc 関数を呼び出したときに提供 コンテキスト領域へのポインター。 ミニポート ドライバーが ミニポートInterrupt 関数の TargetProcessors パラメーターでビットマスクを返したために、ミニポートInterruptDPC NDIS が呼び出された場合、ミニポート は NULL 。
[in] ReceiveThrottleParameters
へのポインター NDIS_RECEIVE_THROTTLE_PARAMETERS 構造体。 この構造体は、ミニポート ドライバーが DPC で示す必要がある NET_BUFFER_LIST 構造体の最大数を指定します。
[in] NdisReserved2
NDIS 用に予約されています。
戻り値
何一つ
備考
NdisMRegisterInterruptEx 関数 割り込みを登録するミニポート ドライバーは、ミニポートInterruptDPC 関数を提供する必要があります。
NDIS は、割り込みの遅延処理 完了するミニポートInterruptDPC を呼び出します。 ミニポート ドライバーは、ndisMQueueDpcEx を呼び出すか、NdisMQueueDpc 関数を して、他のプロセッサの追加の遅延プロシージャ呼び出し (DPC) を要求できます。
ミニポート ドライバーは、各割り込みのソースを決定し、適切なアクションを実行します。 たとえば、割り込みが送信操作の完了を示す場合、ミニポート ドライバーは保留中の送信要求を完了します。 割り込みのソースがリンク状態の変更である場合、ミニポート ドライバーは NDIS に新しいリンクの状態を示します。 未処理の受信パケットがある場合、ミニポート ドライバーは NDIS へのパケットを示します。
受信側スケーリング (RSS)をサポートし、機能が有効になっているミニポート ドライバーは、ミニポートInterruptDPC 内受信キューを調べます。 NIC がそのような機能を提供する場合、NIC は既にハッシュ値に基づいて個別のキューで受信パケットをキューに入れた可能性があります。 それ以外の場合、ミニポート ドライバーは、ミニポートInterruptDPC 個別のキューにパケットを並べ替えることができます。
ミニポートInterruptDPC 呼び出す NdisMIndicateReceiveNetBufferLists 現在のプロセッサ上のパケットを示す関数です。 ミニポートInterruptDPC は、他の CPU に必要な処理を識別し、DPC が未処理でない CPU で DPC をスケジュールするように NDIS を要求できます。
現在の DPC が ミニポートInterrupt 関数と同じ CPU で実行されている場合、ミニポート ドライバーは、CPU にマップできなかったすべてのパケットを示す必要があります。 この DPC が最後にスケジュールされた DPC であり、追加の DPC を要求しない場合、ミニポートInterruptDPC が返される前に、NIC の割り込みを再度有効にする必要があります。
割り込みは通常、NDIS がミニポートInterruptDPC 呼び出す前に、ミニポートInterrupt 関数の NIC で既に無効になっています。 制御を返す前に、ミニポートInterruptDPC 割り込みを再び可能にすることができます。 割り込みが無効になっている間にミニポート ドライバーが追加の DPC をキューに入れていた場合、ドライバーは最後の DPC が返される前に割り込みを有効にする必要があります。
ミニポート ドライバーは、割り込み DPC バッチ を処理している間に示す受信バッファーの数を制限する必要があります、必要な制限時間内に完了します。 割り込み DPC バッチは、ISR の後、および割り込みが再び有効になる前に実行されるすべての DPC のコレクションです。
ミニポート ドライバーは、次を呼び出すことができます。 NdisMDeregisterInterruptEx 関数を ミニポートInitializeEx または ミニポートHaltEx 関数から NdisMRegisterInterruptExで割り当てられたリソースを解放します。 NdisMDeregisterInterruptEx 戻った後、NDIS はミニポート ドライバーの ミニポートInterrupt または ミニポートInterruptDPC 関数を呼び出しません。
NDIS は、IRQL = DISPATCH_LEVEL でミニポートInterruptDPC 呼び出します。
の例
ミニポートInterruptDPC 関数を定義するには、まず、定義する関数の型を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数の種類のセットが用意されています。 関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、"MyInterruptDPC" という名前の ミニポートInterruptDPC 関数を定義するには、次のコード例に示すように MINIPORT_INTERRUPT_DPC 型を使用します。
MINIPORT_INTERRUPT_DPC MyInterruptDPC;
次に、次のように関数を実装します。
_Use_decl_annotations_
VOID
MyInterruptDPC(
NDIS_HANDLE MiniportInterruptContext,
PVOID MiniportDpcContext,
PVOID ReceiveThrottleParameters,
PVOID NdisReserved2
)
{...}
MINIPORT_INTERRUPT_DPC 関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations 注釈により、ヘッダー ファイル内の MINIPORT_INTERRUPT_DPC 関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「ndis ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.0 以降でサポートされています。 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | DISPATCH_LEVEL |
関連項目
NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERSNdisMDeregisterInterruptEx の
NdisMIndicateReceiveNetBufferLists のNdisMQueueDpc の
NdisMQueueDpcEx の
NdisMRegisterInterruptEx の