次の方法で共有


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

ProtocolClOpenAfCompleteEx 関数は、NdisClOpenAddressFamilyEx 関数と呼ばれる CoNDIS クライアントが起動したときに開始されたアドレス ファミリ (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 でない場合、クライアントは、NdisClXxx 関数と NdisCo Xxx 関数の後続の呼び出しで使用するためにハンドル保存する必要があります。

[in] Status

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

NDIS_STATUS_SUCCESS

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

NDIS_STATUS_RESOURCES

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

NDIS_STATUS_FAILURE

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

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

戻り値

なし

解説

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

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

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

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

クライアントが着信呼び出しを受け入れる場合は、サービスごとのアクセス ポイント (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 以降でサポートされています。
対象プラットフォーム Windows
ヘッダー ndis.h (Ndis.h を含む)
IRQL PASSIVE_LEVEL

こちらもご覧ください

NdisClOpenAddressFamilyEx

NdisClRegisterSap

NdisCoCreateVc

NdisCoOidRequest

ProtocolCmOpenAf

ProtocolCoAfRegisterNotify