NdisCloseCall 함수(ndis.h)

NdisCloseCall 은 지정된 VC에 대한 호출을 중단하도록 요청합니다.

구문

NDIS_STATUS NdisClCloseCall(
  [in]           NDIS_HANDLE NdisVcHandle,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in, optional] PVOID       Buffer,
  [in]           UINT        Size
);

매개 변수

[in] NdisVcHandle

닫혀 있거나 연결이 끊어진 호출의 VC에 대한 핸들입니다. 이 핸들은 NDIS에서 NdisCoCreateVc를 사용하여 VC를 만들었을 때 발신 호출을 준비하기 위해 클라이언트에서 또는 클라이언트에 들어오는 호출을 디스패치하기 위한 준비를 위해 호출 관리자에 의해 제공되었습니다.

[in, optional] NdisPartyHandle

멀티포인트 VC 또는 NULL에서 삭제할 마지막 파티에 대한 핸들입니다. 다중 지점 VC인 경우 클라이언트는 이전 NdisClMakeCall 또는 NdisClAddParty 호출에서 이 핸들을 얻었습니다.

[in, optional] Buffer

연결을 닫을 때 원격 노드의 파티로 전송할 데이터를 포함하는 호출자가 할당한 버퍼에 대한 포인터입니다. 기본 매체에 따라 이 포인터는 NULL일 수 있습니다.

[in] Size

BufferNULL인 경우 버퍼의 크기(바이트)를 0으로 지정합니다.

반환 값

NdisCloseCall이 NDIS_STATUS_PENDING 이외의 항목을 반환하는 경우 클라이언트는 내부 호출을 수행해야 합니다. ProtocolCloseCallComplete 함수입니다. 그렇지 않으면 NDIS는 이 작업이 완료되면 클라이언트의 ProtocolCloseCallComplete 함수를 호출합니다.

설명

클라이언트는 일반적으로 다음 상황 중 하나에서 NdisCloseCall 을 호출합니다.

  • 설정된 통화를 닫기 위해 NdisClMakeCall 을 사용하여 클라이언트에서 호출을 시작했는지 또는 원격 피어에서 제공되었고 클라이언트가 수락했는지 여부 ProtocolClIncomingCall 함수입니다.
  • 에서 ProtocolClIncomingCloseCall 함수는 설정된 호출을 해제합니다.

    원격 당사자가 원격 당사자가 원래 시작했고 클라이언트가 수락한 들어오는 호출을 닫을 때 발생합니다. 클라이언트에서 시작한 발신 호출의 경우 원격 당사자가 원격 노드에서 지점 간 연결을 닫거나 다중 지점 VC의 마지막 남은 파티가 원격 노드에서 호출을 닫을 때 발생합니다.

  • 에서 ProtocolClMakeCallComplete 함수는 발신 호출을 위해 클라이언트에서 시작한 시도를 해제합니다.

    이는 호출 관리자가 NdisClMakeCall 에 전달된 클라이언트 지정 호출 매개 변수를 수정했으며 클라이언트가 이러한 수정을 허용할 수 없음을 발견한 경우에 발생합니다.

  • ProtocolClIncomingQoSChange 함수에서 설정된 호출을 해제합니다.

    이는 VC에서 상대방이 제안한 QoS 변경이 클라이언트에서 허용되지 않는 경우에 발생합니다.

  • 에서 ProtocolClModifyCallQoSComplete 함수를 사용하여 설정된 호출을 해제합니다.

    이는 VC에서 클라이언트에서 제안한 QoS 변경이 허용되지 않고 ProtocolClModifyCallQoSComplete 로 반환된 CM 수정 QoS가 클라이언트에서 허용되지 않는 경우에 발생합니다.

NdisCloseCall을 호출하기 전에 프로토콜은 모든 미해결 송신 패킷이 해당 패킷으로 반환되었는지 확인해야 합니다. ProtocolCoSendNetBufferListsComplete 함수입니다. ( NdisCoSendNetBufferLists 를 통해 전송된 패킷은 항상 ProtocolCoSendNetBufferListsComplete에 비동기적으로 반환됩니다.) NdisCloseCall을 호출한 후 프로토콜은 NdisCoSendNetBufferLists 를 호출하여 NdisCloseCall에서 참조하는 VC에 패킷을 보내면 안 됩니다.

클라이언트가 NdisCloseCall을 호출하면 NDIS가 NdisVcHandle을 닫는 것으로 표시하고 CM의 ProtocolCmCloseCall 함수를 호출합니다.

클라이언트에서 만든 멀티포인트 VC에서 설정된 호출을 해제하려면 클라이언트가 NdisClDropParty 를 한 번 이상 호출하여 NdisClCloseCall을 호출하기 전에 VC의 마지막 파티를 제외한 모든 파티를 해제해야 합니다. 지정된 VC에 둘 이상의 파티가 연결되어 있는 경우 호출 관리자는 클라이언트의 멀티포인트 호출 닫기 요청에 실패합니다. NdisCloseCall에 전달된 NdisPartyHandle은 클라이언트가 지정된 NdisVcHandle 을 사용하여 NdisClAddParty 또는 NdisClMakeCall에 대한 이전 호출에서 얻은 유효한 핸들일 수 있습니다.

클라이언트에서 시작한 멀티포인트 호출에 대한 원격 당사자가 연결을 닫도록 요청하면 NDIS는 클라이언트에서 만든 멀티포인트 VC에 둘 이상의 미해결 당사자가 있는 한 해당 클라이언트의 ProtocolClDropParty 기능을 호출합니다. 마지막 남은 원격 당사자가 연결을 닫으면 NDIS는 클라이언트를 호출합니다. ProtocolClIncomingCloseCall 함수를 대신 사용합니다. 따라서 멀티포인트 연결을 설정하는 모든 클라이언트의 ProtocolClIncomingCloseCall 함수는 해당 멀티포인트 VC의 마지막 남은 당사자를 식별하고 적절한 NdisPartyHandleNdisCloseCall에 전달해야 합니다.

클라이언트가 NdisCloseCall을 사용하여 NdisPartyHandle을 릴리스한 후에는 유지 관리 중인 파티별 상태에 대한 리소스를 해제(또는 재사용을 위해 다시 초기화)할 수 있습니다. 그러나 클라이언트는 NdisCloseCall 로 시작된 작업이 완료될 때 VC별 리소스를 비슷한 방식으로 해제하거나 다시 사용할 수 없습니다. VC가 제거될 때까지 다른 호출을 수행하도록 다시 사용할 수 없는 NdisVcHandle은 여전히 유효하기 때문입니다. 클라이언트는 VC당 리소스를 해제하거나 다시 초기화하기 전에 나가는 호출에 대한 VC를 만든 경우 NdisCoDeleteVc 를 호출해야 합니다. 그렇지 않으면 클라이언트는 ProtocolCoDeleteVc 함수가 호출될 때까지 이러한 리소스의 릴리스 또는 다시 초기화를 연기해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista에서 NDIS 6.0 및 NDIS 5.1 드라이버(NdisCloseCall(NDIS 5.1 참조))에 대해 지원됩니다. Windows XP에서 NDIS 5.1 드라이버(NdisCloseCall(NDIS 5.1 참조))에 대해 지원됩니다.
대상 플랫폼 데스크톱
머리글 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 Irql_Protocol_Driver_Function(ndis)

추가 정보

NdisClDropParty

NdisClMakeCall

NdisClModifyCallQoS

NdisCoDeleteVc

NdisCoSendNetBufferLists

ProtocolCloseCallComplete

ProtocolClIncomingCallQoSChange

ProtocolClIncomingCloseCall

ProtocolClIncomingDropParty

ProtocolClMakeCallComplete

ProtocolClModifyCallQoSComplete

ProtocolCmCloseCall

ProtocolCoSendNetBufferListsComplete