次の方法で共有


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

ProtocolClIncomingCloseCall 関数は、すべての接続指向 NDIS クライアントで使用されます。 このようなすべてのクライアントには、完全に機能 する ProtocolClIncomingCloseCall 関数が 必要です。

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

構文

PROTOCOL_CL_INCOMING_CLOSE_CALL ProtocolClIncomingCloseCall;

void ProtocolClIncomingCloseCall(
  [in] NDIS_STATUS CloseStatus,
  [in] NDIS_HANDLE ProtocolVcContext,
  [in] PVOID CloseData,
  [in] UINT Size
)
{...}

パラメーター

[in] CloseStatus

接続の破棄の原因を示す状態を指定します。通常は、呼び出しのリモート パーティが接続を閉じるよう要求したことを示すためにNDIS_STATUS_SUCCESSされます。 その他の値は、ネットワーク上の問題が原因で呼び出しマネージャーが接続を終了したことを示します。

[in] ProtocolVcContext

接続が閉じられている VC のクライアントの VC ごとのコンテキスト領域へのハンドルを指定します。 CloseStatus の値が何であれ、クライアントは、このコンテキスト領域に格納されている NdisVcHandle によって指定された VC 上のデータを送受信できません。

[in] CloseData

プロトコル固有の閉じるメッセージを含むバッファーへのポインター。呼び出しマネージャーがネットワーク経由で受信したリモート クライアントによって提供される場合があります。または、このパラメーターは NULL にすることができます。

CloseStatus がNDIS_STATUS_SUCCESSされている場合、基になるネットワーク メディアが接続を閉じるときにデータの転送をサポートしていない場合、このパラメーターは NULL になります。 ただし、特定の呼び出しマネージャーは、ネットワーク上の問題によって引き起こされる呼び出しの破棄時に追加の診断情報をクライアントに渡す構造を定義する場合があります。

[in] Size

CloseData でバッファーのサイズをバイト単位で指定します。CloseData が NULL の場合は 0 です

戻り値

なし

解説

ProtocolClIncomingCloseCall の呼び出しは、次のいずれかが発生したことを示します。

  • 呼び出しマネージャーは、確立された接続を閉じる要求をネットワーク経由で受信しました。これは、クライアントが ProtocolVcContext の VC ごとのコンテキスト領域に格納されている NdisVcHandle によって識別されます。
  • 呼び出しマネージャーは、ネットワークの問題により、確立された接続でのそれ以上のデータ転送を妨げる可能性があることを検出しました。
どちらの場合も、 ProtocolClIncomingCloseCall は、接続が切断されていることをクライアント自身のクライアントに通知するなど、プロトコルによって決定された操作を実行する必要があります。 たとえば、閉じる呼び出しがクライアントによって作成されたマルチポイント VC の場合、 ProtocolClIncomingCloseCall は、1 つのパーティのみがマルチポイント VC に残るまで NdisClDropParty を 1 回以上呼び出す必要があります。

指定された VC が単一ポイント接続であるかマルチポイント接続であるかに関係なく、 ProtocolClIncomingCloseCallNdisClCloseCall を呼び出して、クライアントがこの特定の VC のデータの送受信を試みないことを確認する必要があります。 呼び出しマネージャーがこの VC を作成した場合、ProtocolClIncomingCloseCall は NdisClCloseCall を呼び出した後に制御を返す必要があります。 作成した VC を破棄または再利用するのは、呼び出しマネージャーの責任です。

クライアントが最初に発信呼び出し用にこの VC を作成した場合、 ProtocolClIncomingCloseCall は、 NdisClDropParty を必要な回数だけ呼び出し、 NdisClCloseCall を呼び出した後に、次のいずれかを実行できます。

  • CloseStatus がNDIS_STATUS_SUCCESS場合は、NdisCoDeleteVc を使用して VC を破棄し、クライアントの VC ごとのコンテキスト領域を解放するか、NdisCoCreateVc への後続の呼び出しで再利用できるように準備します。
  • CloseStatus がNDIS_STATUS_SUCCESS場合は、クライアントが作成した VC を保持し、NdisClMakeCall の後続の呼び出しで再利用できるように VC ごとのコンテキスト領域を準備します。
  • それ以外の場合は、 NdisCoDeleteVc を使用して VC を破棄し、呼び出しマネージャーがネットワークが動作しなくなったことを示している場合は、VC ごとのコンテキスト領域を解放します。

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

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

PROTOCOL_CL_INCOMING_CLOSE_CALL MyClIncomingCloseCall;

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

_Use_decl_annotations_
VOID
 MyClIncomingCloseCall(
    NDIS_STATUS  CloseStatus,
    NDIS_HANDLE  ProtocolVcContext,
    PVOID  CloseData,
    UINT  Size
    )
  {...}

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

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

要件

要件
サポートされている最小のクライアント Windows Vista の NDIS 6.0 および NDIS 5.1 ドライバー (「ProtocolClIncomingCloseCall (NDIS 5.1)」を参照) でサポートされています。 Windows XP の NDIS 5.1 ドライバー (「ProtocolClIncomingCloseCall (NDIS 5.1)」を参照) でサポートされています。
対象プラットフォーム Windows
ヘッダー ndis.h (Ndis.h を含む)
IRQL <= DISPATCH_LEVEL

こちらもご覧ください

NdisClCloseCall

NdisClDropParty

NdisClMakeCall

NdisCmDispatchIncomingCloseCall

NdisCoCreateVc

NdisCoDeleteVc

NdisFreeMemory

NdisFreeToNPagedLookasideList NdisMCmDispatchIncomingCloseCall

ProtocolClDropPartyComplete

ProtocolCoDeleteVc