MINIPORT_SYNCHRONIZE_INTERRUPTコールバック関数 (ndis.h)
ミニポート ドライバーは、DIRQL 未満で実行されるドライバー関数が ミニポートInterrupt 関数とリソースを共有する場合は、ミニポートSynchronizeInterrupt ハンドラーを提供する必要があります。
メッセージ通知割り込みの場合、ミニポート ドライバーは、DIRQL 未満で実行されるドライバー関数が、ミニポート メッセージInterrupt 関数を使用して、メッセージ通知割り込みのリソースを共有する場合に、ミニポートSynchronizeMessageInterrupt ハンドラーを提供します。
構文
MINIPORT_SYNCHRONIZE_INTERRUPT MiniportSynchronizeInterrupt;
BOOLEAN MiniportSynchronizeInterrupt(
[in] NDIS_HANDLE SynchronizeContext
)
{...}
パラメーター
[in] SynchronizeContext
ミニポート ドライバーの ミニポートXxx または内部関数が呼び出されたときに提供されるコンテキスト領域へのハンドルNdisMSynchronizeWithInterruptEx 関数を します。
戻り値
ミニポートSynchronizeInterrupt は、ドライバーによって決定された意味を持つブール値を返します。 NDIS は、NDIS が ndisMSynchronizeWithInterruptEx から返されるときに同じ値を返します。
備考
共有リソースへのアクセスを ミニポートInterruptと同期するには、優先順位の低いドライバー関数で次の値を呼び出す必要があります。NdisMSynchronizeWithInterruptEx 関数を します。 ドライバーの ミニポートSynchronizeInterrupt 関数は、DIRQL の共有リソースにアクセスします。 NdisMSynchronizeWithInterruptEx 呼び出すと、このようなミニポート ドライバーでの競合状態やデッドロックを防ぐことができます。
リソースを共有する優先順位の低いドライバー関数 (DIRQL で実行される関数を除く) は、スピン ロックを使用してそれらの共有リソースを保護する必要があります。
ミニポートSynchronizeInterrupt は、ドライバーの ミニポートInitializeEx 関数が呼び出されたときに割り当てられた DIRQL で実行されます。NdisMRegisterInterruptEx 関数を します。 DIRQL で実行されるドライバー関数と同様に、ミニポートSynchronizeInterrupt はできるだけ早く呼び出し元に制御を戻す必要があります。また、任意の IRQL で安全に呼び出すことができる NdisXxx関数 のみを呼び出すことができます。
の例
ミニポートSynchronizeInterrupt 関数を定義するには、まず、定義する関数の型を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数の種類のセットが用意されています。 関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、"MySynchronizeInterrupt" という名前の ミニポートSynchronizeInterrupt 関数を定義するには、次のコード例に示すように MINIPORT_SYNCHRONIZE_INTERRUPT 型を使用します。
MINIPORT_SYNCHRONIZE_INTERRUPT MySynchronizeInterrupt;
次に、次のように関数を実装します。
_Use_decl_annotations_
BOOLEAN
MySynchronizeInterrupt(
NDIS_HANDLE SynchronizeContext
)
{...}
メッセージ通知割り込みの ミニポートSynchronizeMessageInterrupt 関数を定義するには、次のコード例に示すように MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 型を使用します。
MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT MySynchronizeMessageInterrupt;
次に、次のように関数を実装します。
_Use_decl_annotations_
BOOLEAN
MySynchronizeMessageInterrupt(
NDIS_HANDLE SynchronizeContext
)
{...}
MINIPORT_SYNCHRONIZE_INTERRUPT および MINIPORT_SYNCHRONIZE_MESSAGE_INTERRUPT 関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations 注釈により、ヘッダー ファイル内の関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「ndis ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | NDIS 6.0 以降でサポートされています。 |
ターゲット プラットフォーム の | ウィンドウズ |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | 「解説」セクションを参照してください |
関連項目
NdisAllocateSpinLock の
NdisMRegisterInterruptEx の
NdisMSynchronizeWithInterruptEx の