MINIPORT_HALT コールバック関数 (ndis.h)
NDIS は、ミニポート アダプターが削除されたときにリソースを解放し、ハードウェアを停止するミニポート ドライバーの ミニポートHaltEx 関数を呼び出します。 この関数は、ミニポートを停止状態にします。他のコールバックは発生しません ( MiniportShutdownEx を含む)。 ミニポート ドライバーの状態の詳細については、「 ミニポート アダプターの状態と操作」を参照してください。
構文
MINIPORT_HALT MiniportHalt;
void MiniportHalt(
[in] NDIS_HANDLE MiniportAdapterContext,
[in] NDIS_HALT_ACTION HaltAction
)
{...}
パラメーター
[in] MiniportAdapterContext
ミニポート ドライバーがその MiniportInitializeEx 関数で割り当てたコンテキスト領域へのハンドル。 ミニポート ドライバーは、このコンテキスト領域を使用して、ミニポート アダプターの状態情報を維持します。
[in] HaltAction
ミニポート アダプターを停止する理由。 次のいずれかの値を指定できます。
NdisHaltDeviceDisabled
NDIS は、プラグ アンド プレイ (PnP) の削除メッセージに応答してミニポート アダプターを停止しています。
NdisHaltDeviceInstanceDeInitialized
NDIS は、 を呼び出す中間ドライバーに応答してミニポート アダプターを停止しています。 NdisIMDeInitializeDeviceInstance 関数。
NdisHaltDevicePoweredDown
システムがスリープ状態になるため、NDIS はミニポート アダプターを停止しています。
NdisHaltDeviceSurpriseRemoved
ミニポート アダプターが突然削除され、ハードウェアが存在しません。
NdisHaltDeviceFailed
ハードウェア障害が原因でミニポート アダプターが削除されています。 NdisMRemoveMiniport 関数と呼ばれるミニポート ドライバーか、バス ドライバーが再開時に NIC の電源をオンにしませんでした。
NdisHaltDeviceInitializationFailed
ミニポート InitializeEx 関数が正常に完了した後、NDIS が不明な理由でミニポート アダプターを初期化できませんでした。
NdisHaltDeviceStopped
NDIS は、PnP 停止デバイス メッセージに応答してミニポート アダプターを停止しています。
戻り値
なし
解説
ドライバーは、 を呼び出すときに 、MiniportHaltEx エントリ ポイントを指定します。 NdisMRegisterMiniportDriver 関数。
NDIS は、ドライバー の MiniportInitializeEx 関数が正常に返された後、いつでも MiniportHaltEx を 呼び出すことができます。 ドライバーが物理 NIC を制御する場合、 MiniportHaltEx は NIC を停止する必要があります。 NDIS 中間ドライバーが を呼び出す場合 NdisIMDeInitializeDeviceInstance 関数は、ドライバーの仮想デバイスの MiniportHaltEx 関数を呼び出します。
MiniportHaltEx は、デバイスの MiniportInitializeEx に割り当てられたすべてのリソースを解放する必要があります。 また、MiniportHaltEx は、そのデバイスの後続の操作でドライバーが割り当てた他のリソースも解放します。 ドライバーは、最初にリソースを割り当てた NdisXxx 関数の逆数を呼び出す必要があります。 一般的な規則として、MiniportHaltEx 関数は、ミニポートInitializeEx から行われたドライバーの呼び出しに逆順に逆の逆の NdisXxx 関数を呼び出す必要があります。
NIC で割り込みが生成された場合、ミニポート ドライバーのミニポートHaltEx 関数は、ミニポートHaltEx が を呼び出すまで、ドライバーの MiniportInterrupt 関数によって割り込むことができます。 NdisMDeregisterInterruptEx 関数は を返します。 このようなドライバーの ミニポートHaltEx 関数は、割り込みを無効にする必要がありますし、 を呼び出す可能な限り早く NdisMDeregisterInterruptEx。 ドライバーは、 まで割り込みを取得し続けることができることに注意してください。 NdisMDeregisterInterruptEx は を返します。 NdisMDeregisterInterruptEx は、ドライバーがスケジュールされたすべての DPC を完了するまで戻りません (詳細については 、MiniportInterruptDPC 関数を参照してください)。
システム タイマー キュー内にある可能性があるタイマー オブジェクトに関連付けられている NetTimerCallback 関数がドライバーにある場合、 MiniportHaltEx は NdisCancelTimerObject 関数を呼び出す必要があります。 NdisCancelTimerObject が失敗した場合、タイマーは既に発生している可能性があります。 この場合、ドライバーは 、ドライバーが MiniportHaltEx から戻る前に、タイマー関数が完了するまで待機する必要があります。
未処理の OID 要求がある場合、または要求を送信する場合、NDIS は MiniportHaltEx を呼び出しません。 NDIS は、 NDIS が MiniportHaltEx を呼び出した後、影響を受けるデバイスに対してそれ以上の要求を送信しません。
ドライバーが操作の完了を待機する必要がある場合、 MiniportHaltEx は NdisWaitEvent 関数または NdisMSleep 関数を使用できます。
NDIS は、IRQL = PASSIVE_LEVELで MiniportHaltEx を呼び出します。
例
MiniportHaltEx 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバー用の一連の関数型が用意されています。 関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、" MyHaltEx" という名前の MiniportHaltEx 関数を定義するには、次のコード例に示すように 、MINIPORT_HALT 型を使用します。
MINIPORT_HALT MyHaltEx;
次に、次のように関数を実装します。
_Use_decl_annotations_
VOID
MyHaltEx(
NDIS_HANDLE MiniportAdapterContext,
NDIS_HALT_ACTION HaltAction
)
{...}
MINIPORT_HALT関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のMINIPORT_HALT関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
対象プラットフォーム | Windows |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | WlanAssociation、WlanConnectionRoaming、WlanDisassociation、WlanTimedAssociation、WlanTimedConnectionRoaming、WlanTimedConnectRequest、WlanTimedLinkQuality、WlanTimedScan |