次の方法で共有


PROTOCOL_CL_OPEN_AF_COMPLETE_EXコールバック関数 (ndis.h)

ProtocolClOpenAfCompleteEx 関数は、NdisClOpenAddressFamilyEx 関数を呼び出したときに開始されたアドレス ファミリ (AF) のオープンを完了します。

PROTOCOL_CL_OPEN_AF_COMPLETE_EX 型を使用して関数を宣言する必要があります。 詳細については、次の例のセクションを参照してください。
 

構文

PROTOCOL_CL_OPEN_AF_COMPLETE_EX ProtocolClOpenAfCompleteEx;

void ProtocolClOpenAfCompleteEx(
  [in] NDIS_HANDLE ProtocolAfContext,
  [in] NDIS_HANDLE NdisAfHandle,
  [in] NDIS_STATUS Status
)
{...}

パラメーター

[in] ProtocolAfContext

アドレス AF のコンテキスト領域に対するクライアント提供のハンドル。 クライアントは、このコンテキスト領域を割り当て、NDIS への呼び出しでこのハンドルを渡しました。NdisClOpenAddressFamilyEx 関数を します。

[in] NdisAfHandle

状態 がNDIS_STATUS_SUCCESSされている場合は、AF に対する NDIS 提供のハンドル。 それ以外の場合、このパラメーターは NULL 。 このハンドルは、クライアントと CoNDIS ミニポート アダプターにバインドされている呼び出しマネージャーの間で NDIS が確立した関連付けを表します。 ハンドルが NULL でない場合、クライアントは、Xxxおよび NdisCoXxx 関数を NdisCl呼び出しで使用するためにハンドルを保存する必要があります。

[in] Status

NdisClOpenAddressFamilyEx するクライアントの呼び出しの最終的な状態。次のいずれかになります。

NDIS_STATUS_SUCCESS

AF が開かれているため、クライアントは ProtocolAfContext で状態 初期化し、NdisCoOidRequest などの NdisCoXxxおよび NdisCoXxx 関数を する後続の呼び出しで、NdisAfHandle から返されたハンドルを使用できます。

NDIS_STATUS_RESOURCES

要求された操作が失敗しました。NDIS または呼び出しマネージャーが十分なメモリを割り当てなかったか、ProtocolAfContext が指定する AF のクライアントの開きを追跡するために使用する状態 初期化できませんでした。

NDIS_STATUS_FAILURE

NDIS が呼び出しに失敗しました。次のいずれかの理由が考えられます。

  • 指定された AF は、呼び出し元がバインドされている基になるミニポート ドライバーに登録された AF と一致しません。
  • 呼び出し元のアダプター バインドが閉じています。
  • 指定した AF を登録した呼び出しマネージャーは、基になるミニポート アダプターへのバインドを閉じています。

戻り値

何一つ

備考

CoNDIS クライアントには、ProtocolClOpenAfCompleteEx 関数が必要です。 CoNDIS クライアントは、ProtocolClOpenAfCompleteEx を提供して、クライアントが呼び出して開始する非同期操作を完了する必要があります。NdisClOpenAddressFamilyEx 関数を します。

NDIS は、ProtocolClOpenAfCompleteEx 呼び出して、次の一部またはすべてが発生したことを示します。

  • クライアントのすべてのパラメーターが、クライアントの ProtocolCoAfRegisterNotify NdisClOpenAddressFamilyEx 関数に渡された 関数は有効でした。NDIS は、指定された AF を NDIS に登録した呼び出しマネージャーの ProtocolCmOpenAf 関数を呼び出しました。
  • 呼び出しマネージャーは、クライアントの ProtocolCoAfRegisterNotify 関数が AddressFamily パラメーターで NdisClOpenAddressFamilyEx に渡され、この呼び出しマネージャーが NDIS に対して有効かどうかを返したという仕様を調べました。
AF を開こうとしたクライアントの試行が失敗した場合、NDIS は ProtocolClOpenAfCompleteEx 呼び出す前に保存された状態をクリーンアップします。 この場合、ProtocolClOpenAfCompleteEx は、クライアントが NdisClOpenAddressFamilyEx する呼び出しに割り当てたリソースを解放したり、再利用の準備をしたりできます。

それ以外 、ProtocolClOpenAfCompleteEx は、クライアントが新しく開いた AF に対する後続の操作に必要なクライアントによって決定される状態を設定する必要があります。 特に、クライアントは、通常、クライアントの ProtocolAfContext コンテキスト領域で、NdisAfHandle パラメーターからハンドルを保存する必要があります。

クライアントが着信呼び出しを受け入れる場合は、サービスごとのアクセス ポイント (SAP) 状態領域を割り当て、NdisClRegisterSap 関数を呼び出す可能性があります。 クライアントが発信呼び出しを行う場合は、仮想接続単位 (VC) 状態領域を割り当て、NdisCoCreateVc 関数を使用して VC を作成し、クライアント独自のクライアントのいずれかからの着信要求を準備してリモート ノードへの発信呼び出しを行う可能性があります。

NDIS は、IRQL = PASSIVE_LEVEL で ProtocolClOpenAfCompleteEx 呼び出します。

の例

ProtocolClOpenAfCompleteEx 関数を定義するには、まず、定義する関数の型を識別する関数宣言を指定する必要があります。 Windows には、ドライバーの関数の種類のセットが用意されています。 関数の種類を使用して関数を宣言すると、ドライバー のコード分析、静的ドライバー検証ツール (SDV)、およびその他の検証ツールをすると、エラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。

たとえば、"MyClOpenAfCompleteEx" という名前の ProtocolClOpenAfCompleteEx 関数を定義するには、次のコード例に示すように PROTOCOL_CL_OPEN_AF_COMPLETE_EX 型を使用します。

PROTOCOL_CL_OPEN_AF_COMPLETE_EX MyClOpenAfCompleteEx;

次に、次のように関数を実装します。

_Use_decl_annotations_
VOID
 MyClOpenAfCompleteEx(
    NDIS_HANDLE  ProtocolAfContext,
    NDIS_HANDLE  NdisAfHandle,
    NDIS_STATUS  Status
    )
  {...}

PROTOCOL_CL_OPEN_AF_COMPLETE_EX 関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations 注釈により、ヘッダー ファイル内の PROTOCOL_CL_OPEN_AF_COMPLETE_EX 関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「ndis ドライバーの の関数の役割の種類を使用して関数を宣言するを参照してください。

Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント NDIS 6.0 以降でサポートされています。
ターゲット プラットフォーム ウィンドウズ
ヘッダー ndis.h (Ndis.h を含む)
IRQL PASSIVE_LEVEL

関連項目

NdisClOpenAddressFamilyEx

NdisClRegisterSap

NdisCoCreateVc

NdisCoOidRequest

ProtocolCmOpenAf

ProtocolCoAfRegisterNotify