PROTOCOL_CM_CLOSE_CALL コールバック関数 (ndis.h)
ProtocolCmCloseCall 関数は、既存の呼び出しを終了し、呼び出しマネージャーが呼び出しに割り当てたリソースを解放する必須の関数です。
構文
PROTOCOL_CM_CLOSE_CALL ProtocolCmCloseCall;
NDIS_STATUS ProtocolCmCloseCall(
[in] NDIS_HANDLE CallMgrVcContext,
[in, optional] NDIS_HANDLE CallMgrPartyContext,
[in, optional] PVOID CloseData,
[in, optional] UINT Size
)
{...}
パラメーター
[in] CallMgrVcContext
呼び出しマネージャーが VC ごとの状態を維持する、呼び出しマネージャーによって割り当てられたコンテキスト領域へのハンドルを指定します。 このハンドルは、呼び出しマネージャー ProtocolCmMakeCall 関数から NDIS に提供されました。
[in, optional] CallMgrPartyContext
コール マネージャがマルチポイント VC 上のパーティに関する情報を保持するコール マネージャ割り当てコンテキスト領域へのハンドル (存在する場合) を指定します。 閉じている呼び出しがマルチポイント呼び出しでない場合、このハンドルは NULL です 。
[in, optional] CloseData
呼び出しが終了する前に接続全体で送信する必要がある、接続指向のクライアント指定データを含むバッファーへのポインター。 基になるネットワーク メディアが接続を閉じるときにデータの転送をサポートしていない場合、このパラメーターは NULL です 。
[in, optional] Size
CloseData が NULL の場合は、CloseData のバッファーの長さをバイト単位で指定します。
戻り値
ProtocolCmCloseCall は、次のいずれかの操作の状態を返します。
リターン コード | 説明 |
---|---|
|
呼び出しマネージャーが呼び出しを正常に終了したことを示します。 |
|
呼び出しマネージャーが、呼び出しを非同期的に終了する要求を完了することを示します。 呼び出しマネージャーは、接続を終了するために必要なすべての操作を完了すると、呼び出しが閉じられたことを NDIS に通知する NdisCmCloseCallComplete を呼び出す必要があります。 |
|
CloseData が指定されたが、基になるネットワーク メディアが呼び出しの終了と同時にデータを送信することをサポートしていないことを示します。 |
|
呼び出しマネージャーが呼び出しを終了できなかったことを示します。 返される実際のエラーは、別の NDIS ライブラリ ルーチンから伝達された状態である可能性があります。 |
注釈
ProtocolCmCloseCall は、ローカル ノードとリモート ノード間の接続を終了するために、そのメディアによって必要に応じて、ネットワーク制御デバイスまたはその他のメディア固有のアクターと通信します。 呼び出しマネージャーがネットワーク制御デバイス (ネットワーク スイッチなど) と通信する必要がある場合は、 ProtocolBindAdapterEx 関数で確立したネットワーク制御デバイスへの仮想接続を使用する必要があります。 スタンドアロン通話マネージャーは、 NdisCoSendNetBufferLists を呼び出すことによって、このようなネットワーク デバイスと通信します。 統合された呼び出し管理サポートを備えたミニポート ドライバーは 、NdisCoSendNetBufferLists を呼び出すことはありません。 代わりに、データをネットワーク経由で直接送信します。
CloseData が NULL 以外で、この呼び出しマネージャーが処理するメディアで接続終了時のデータの送信がサポートされている場合、呼び出しマネージャーは、呼び出しの終了を完了する前に、CloseData で指定されたデータをリモート ノードに送信する必要があります。 接続の終了と同時にデータを送信することがサポートされていない場合、通話マネージャーはNDIS_STATUS_INVALID_DATAを返す必要があります。
ProtocolCmCloseCall に明示的な CallMgrPartyContext が渡された場合、終了する呼び出しはマルチポイント VC であり、呼び出しマネージャーは、マルチポイント呼び出しとして呼び出しを終了するために、そのメディアの種類に応じて、ネットワーク ハードウェアとの必要なネットワーク通信を実行する必要があります。 呼び出しマネージャーは、CallMgrPartyContext によって指されるパーティごとの状態に対して、ProtocolCmMakeCall で以前に割り当てたメモリも解放する必要があります。 これらのリソースを適切に解放、割り当て解除、または非アクティブ化できないと、メモリ リークが発生します。
呼び出しがネットワークで終了し、閉じるデータが送信され、 CallMgrPartyContext のすべてのリソースが解放された後、呼び出しマネージャーは NdisCmDeactivateVc を呼び出す必要があります。 これにより、NDIS と基になるミニポート ドライバー (存在する場合) に、指定された VC でのそれ以上の転送が発生しないように通知されます。
例
ProtocolCmCloseCall 関数を定義するには、まず、定義する関数の種類を識別する関数宣言を指定する必要があります。 Windows には、ドライバー用の一連の関数型が用意されています。 関数の種類を使用して関数を宣言すると、ドライバー、静的ドライバー検証ツール (SDV)、およびその他の検証ツールのコード分析でエラーが検出され、Windows オペレーティング システムのドライバーを記述するための要件になります。たとえば、" MyCmCloseCall" という名前の ProtocolCmCloseCall 関数を定義するには、次のコード例に示すように 、PROTOCOL_CM_CLOSE_CALL 型を使用します。
PROTOCOL_CM_CLOSE_CALL MyCmCloseCall;
次に、次のように関数を実装します。
_Use_decl_annotations_
NDIS_STATUS
MyCmCloseCall(
NDIS_HANDLE CallMgrVcContext,
NDIS_HANDLE CallMgrPartyContext,
PVOID CloseData,
UINT Size
)
{...}
PROTOCOL_CM_CLOSE_CALL関数の種類は、Ndis.h ヘッダー ファイルで定義されています。 コード分析ツールの実行時にエラーをより正確に識別するには、 Use_decl_annotations 注釈を関数定義に追加してください。 Use_decl_annotations注釈を使用すると、ヘッダー ファイル内のPROTOCOL_CM_CLOSE_CALL関数型に適用される注釈が確実に使用されます。 関数宣言の要件の詳細については、「NDIS ドライバーの関数 ロール型を使用して関数を宣言する」を参照してください。
Use_decl_annotationsの詳細については、「関数の動作に注釈を付ける」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「ProtocolCmCloseCall (NDIS 5.1)」を参照) でサポートされています。 Windows XP での NDIS 5.1 ドライバー (「ProtocolCmCloseCall (NDIS 5.1)」を参照) でサポートされています。 |
対象プラットフォーム | Windows |
ヘッダー | ndis.h (Ndis.h を含む) |
IRQL | <= DISPATCH_LEVEL |