呼び出しの実行
次の図は、呼び出しマネージャーにより発信呼び出しを行うクライアントを示しています。
次の図は、MCM ドライバーにより発信呼び出しを行うクライアントを示しています。
発信呼び出しを行う前に、接続指向クライアントは次の作業を行う必要があります。
CO_CALL_PARAMETERS 型構造体で呼び出しパラメーターを初期化します。 通常、呼び出しマネージャーまたは MCM ドライバーは、呼び出しのセットアップと、ミニポート ドライバーによる使用のためのメディア パラメーターの導出でクライアントが指定する呼び出しパラメーターを使用します。
VC の作成 を NdisCoCreateVc を使って開始します。
NdisCoCreateVc が正常に返されると、クライアントは NdisClMakeCall を呼び出して呼び出しを開始します (このセクションの 2 つの図を参照)。
NdisClMakeCall への呼び出しで、クライアントは前に初期化された CO_CALL_PARAMETERS 構造体へのポインターを渡します。 クライアントは、NdisVcHandle (クライアントが呼び出しのデータを送信 (およびおそらく受信) する VC を識別する NdisCoCreateVcにより返されます) も渡します。 クライアントは、マルチポイント呼び出し (複数のリモート パーティへの呼び出し) を行っている場合、マルチポイント VC の初期パーティにおいてパーティごとの状態を維持するクライアント割り当て常駐コンテキスト領域への対応を指定する ProtocolPartyContext を渡しもします。
NdisClMakeCall への呼び出しを行うと、NDIS はこの要求を ProtocolCmMakeCall 関数 (クライアントが特定のNdisVcHandle を共有する呼び出しマネージャーか MCM ドライバーに属する) に転送することになります。 ProtocolCmMakeCall は、クライアントによってセットアップされた入力呼び出しパラメーターを検証する必要があります。
ProtocolCmMakeCall は、接続のためにネットワーク制御デバイスと通信 (信号メッセージの交換) します。 呼び出しマネージャーは、NdisCoSendNetBufferLists を呼び出してこのような交換を開始します (「CoNDIS ドライバーからの NET_BUFFER 構造体の送信」を参照)。 MCM ドライバーは NdisCoSendNetBufferLists を呼び出しません。 代わりに、ネットワーク経由で直接データを送信します。
呼び出しマネージャーまたは MCM ドライバーは、関連するネットワーク コンポーネントとのネゴシエート中に、クライアントが提供した呼び出しパラメーターを変更でき、NdisClMakeCall にクライアントが最初に与えたものとは異なるトラフィック パラメーターを返すことができます (「呼び出しパラメーターを変更する受信要求」を参照)。
明示的な NdisPartyHandle として ProtocolCmMakeCall に渡されたものは、クライアントによって作成された VC がマルチポイント呼び出しに使用されることを示します。 呼び出しマネージャーや MCM ドライバーは、パーティごとの状態情報を維持してマルチポイント呼び出しを制御するために、必要なリソースを割り当てて初期化する必要があります。
呼び出しマネージャーは、メディアの必要に応じてネットワーク ハードウェアとの必要なすべての通信を行った後、NdisCmActivateVc を呼び出し、呼び出しデータが送信されておそらく受信される VC のアクティブ化を開始する必要があります。 MCM ドライバーは NdisMCmActivateVc を呼び出す必要があります。
基盤のミニポート ドライバーが VC でデータ転送を行う準備ができたら (つまり、VC がアクティブ化されたら)、呼び出しマネージャーは NdisCmMakeCallComplete を呼び出し、MCM ドライバーは NdisMCmMakeCallComplete を呼び出します。 この時点で、呼び出しマネージャーまたは MCM ドライバーは VC の呼び出しパラメーターを確立するネットワークとネゴシエートし、基盤のミニポート ドライバーは VC のアクティブ化を完了していることになります。
Ndis(M)CmMakeCallComplete への呼び出しで、呼び出しマネージャーや MCM ドライバーは、CO_CALL_PARAMETERS 型の構造体へのポインターとして VC の呼び出しパラメーターを渡します。 呼び出しマネージャーは、クライアントによって最初に指定された呼び出しパラメーターを変更した場合、CO_CALL_PARAMETERS 構造体で CALL_PARAMETERS_CHANGED フラグを設定してクライアントに通知できます。
Ndis(M)CmMakeCallComplete への呼び出しにより、NDIS は発信呼び出しを最初に生み出したクライアントの ProtocolClMakeCallComplete 関数を呼び出します。 ProtocolClMakeCallComplete への呼び出しは、NdisClMakeCall との仮想接続を確立するためのクライアントの要求の処理を呼び出しマネージャーが完了したことを示します。
クライアントによる発信呼び出しの確立の試行が成功した場合、ProtocolClMakeCallComplete は CALL_PARAMETERS_CHANGED フラグをチェックして、クライアントによって最初に指定された呼び出しパラメーターが変更されたかどうかを判断することになります。 呼び出しパラメーターが変更されたことを示すフラグが設定されている場合、 ProtocolClMakeCallComplete は、返された呼び出しパラメーターを調べて、この接続で許容できるかどうかを判断することになります。
呼び出しパラメーターが許容される場合、ProtocolClMakeCallComplete は単に制御を返します。 呼び出しパラメーターが受け入れられない場合、およびこの時点で信号プロトコルで再ネゴシエーションが許可されている場合、クライアントは NdisClModifyCallQoS を呼び出して、呼び出しパラメーターの変更を要求できます (「呼び出しを閉じるためにクライアントが開始する要求」を参照)。 許容できない呼び出しパラメーターの再ネゴシエーションを信号プロトコルが許可しない場合、ProtocolClMakeCallComplete は NdisClCloseCall で呼び出しを破棄する必要があります (「呼び出しを閉じるためにクライアントが開始する要求」を参照)。