MINIPORT_RESTART コールバック関数 (ndis.h)
MiniportRestart 関数は、一時停止されているミニポート アダプターの再起動要求を開始します。
構文
MINIPORT_RESTART MiniportRestart;
NDIS_STATUS MiniportRestart(
[in] NDIS_HANDLE MiniportAdapterContext,
PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}
パラメーター
[in] MiniportAdapterContext
ミニポート ドライバーがその MiniportInitializeEx 関数で割り当てたコンテキスト領域へのハンドル。 ミニポート ドライバーは、このコンテキスト領域を使用して、ミニポート アダプターの状態情報を維持します。
RestartParameters
へのポインター ミニポート アダプターの 再起動パラメーターを定義する構造体をNDIS_MINIPORT_RESTART_PARAMETERSします。
戻り値
MiniportRestart は、次のいずれかの状態値を返します。
リターン コード | 説明 |
---|---|
|
MiniportRestart は、ミニポート アダプターを介してネットワーク データのフローを正常に再起動しました。 |
|
MiniportRestart は再起動操作を完了せず、操作は非同期的に完了します。 ミニポート ドライバーは、操作が完了したときに NdisMRestartComplete 関数を呼び出す必要があります。 |
|
リソースが不足しているため、ミニポートの再起動に失敗しました。 |
|
上記の状態値は適用しません。 この状況では、ドライバーは失敗の理由を指定するパラメーターを使用して NdisWriteErrorLogEntry 関数を呼び出す必要があります。 |
注釈
ドライバーは、 を呼び出すときに 、MiniportRestart エントリ ポイントを指定します。 NdisMRegisterMiniportDriver 関数。
MiniportAdapterContext パラメーターで指定されたミニポート アダプターは、NDIS が MiniportRestart を呼び出すときに再起動状態になります。
NDIS が MiniportRestart を呼び出すと、ミニポート ドライバーは次のようになります。
- 送受信操作を再開するために必要なタスクを完了する必要があります。
- 必要に応じて、 の RestartAttributes メンバーで指定されている再起動属性を変更します。 NDIS_MINIPORT_RESTART_PARAMETERS 構造体。 RestartAttributes 内のポインターが NULL の場合、ミニポート ドライバーは再起動属性の一覧を変更または追加しないでください。 RestartAttributes 内のポインターが NULL 以外の場合は、NDIS_RESTART_ATTRIBUTES構造体を指します。 ミニポート ドライバーが再起動しない場合は、属性を変更しないでください。
- を使用して状態の表示を提供できます。 NdisMIndicateStatusEx 関数。
- MiniportOidRequest 関数で状態要求を処理する必要があります。
- 新しいメディア固有の属性を再起動属性の一覧に追加できます。 この状況では、ミニポート ドライバーは、新しいを割り当てる必要があります。 構造体NDIS_RESTART_ATTRIBUTES します。たとえば、 NdisAllocateMemoryWithTagPriority 関数-- と は、新しい属性のメモリ領域を提供します。 再起動属性を基になるドライバーに伝達すると、NDIS はミニポート ドライバーの属性メモリを解放します。
- 再起動属性の一覧でメディア固有の属性を変更できます。 ミニポート ドライバーは、より多くのメモリ領域を必要とする場合は、 NdisFreeMemory 関数を使用してNDIS_RESTART_ATTRIBUTES構造体を解放し、変更された情報を格納する新しい構造体を割り当てることができます。 再起動属性を基になるドライバーに伝達すると、NDIS はミニポート ドライバーの属性メモリを解放します。
- 内の任意のフィールドを変更できます。 NDIS_RESTART_GENERAL_ATTRIBUTES 構造体。 NDIS が の RestartAttributes メンバーに NULL 以外のポインターを提供する場合 構造体NDIS_MINIPORT_RESTART_PARAMETERS、属性リストには、NDIS_RESTART_ATTRIBUTES構造体の Oid メンバーが 1 つのエントリに含まれています OID_GEN_MINIPORT_RESTART_ATTRIBUTES と Data メンバーには、NDIS_RESTART_GENERAL_ATTRIBUTES構造体が含まれています。
- 次の点を確認する必要があります。 構造体NDIS_RESTART_GENERAL_ATTRIBUTES 正しい情報が含まれています。 NDIS_RESTART_GENERAL_ATTRIBUTES構造体に必要な情報が含まれていることを確認するには、まず、NDIS_RESTART_GENERAL_ATTRIBUTES構造体の Header メンバーで指定されているNDIS_OBJECT_HEADER構造体の Revision メンバーを確認して、構造体のバージョンを確認する必要があります。
ミニポート ドライバーが正常に送受信操作を再起動した後、再起動操作を完了する必要があります。 ドライバーが MiniportRestart からNDIS_STATUS_SUCCESSを返す場合は、再起動操作が完了します。 ドライバーがNDIS_STATUS_PENDINGを返した場合は、再起動操作を続行できます。 ドライバーが NdisMRestartComplete 関数を呼び出した後、再起動操作が完了します。 再起動操作が完了すると、ミニポート アダプターは 実行中 の状態になります。
ミニポート ドライバーは、NDIS 呼び出しの直後とドライバーが NdisMRestartComplete を呼び出す前に、ミニポート アダプターの受信パケットを示す再開できます。 ミニポート ドライバーは、ドライバーが再起動要求を完了した後、送信要求を受け入れる準備ができている必要があります。
ミニポート ドライバーが送信操作と受信操作を再起動しない場合、ドライバーは MiniportRestart から適切なエラー状態を返す必要があります。 この状況では、ドライバーが開始された送信または受信操作を停止し、 一時停止 状態に戻る必要があります。
NDIS は、IRQL = PASSIVE_LEVELで ミニポートリスタート を呼び出します。
例
MiniportRestart 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバー用の一連の関数型が用意されています。 関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、"MyRestart" という名前の MiniportRestart 関数を定義するには、次のコード例に示すように 、MINIPORT_RESTART 型を使用します。
MINIPORT_RESTART MyRestart;
次に、次のように関数を実装します。
_Use_decl_annotations_
NDIS_STATUS
MyRestart(
NDIS_HANDLE MiniportAdapterContext,
PNDIS_MINIPORT_RESTART_PARAMETERS RestartParameters
)
{...}
MINIPORT_RESTART関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のMINIPORT_RESTART関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | NDIS 6.0 以降でサポートされています。 |
対象プラットフォーム | Windows |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | PASSIVE_LEVEL |