PROTOCOL_CM_CLOSE_CALL 콜백 함수(ndis.h)

ProtocolCmCloseCall 함수는 기존 호출을 종료하고 호출 관리자가 호출에 할당한 모든 리소스를 해제하는 필수 함수입니다.

참고PROTOCOL_CM_CLOSE_CALL 형식을 사용하여 함수를 선언해야 합니다. 자세한 내용은 다음 예제 섹션을 참조하세요.
 

구문

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

CloseDataNULL인 경우 CloseData에 있는 버퍼의 길이(바이트)를 0으로 지정합니다.

반환 값

ProtocolCmCloseCall은 작업의 상태 다음 중 하나로 반환합니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
호출 관리자가 호출을 성공적으로 종료했음을 나타냅니다.
NDIS_STATUS_PENDING
호출 관리자가 호출을 비동기적으로 종료하는 요청을 완료했음을 나타냅니다. 호출 관리자가 연결을 종료하는 데 필요한 모든 작업을 완료한 후 NdisCmCloseCallComplete 를 호출하여 NDIS에 통화가 닫혔다는 신호를 표시해야 합니다.
NDIS_STATUS_INVALID_DATA
CloseData가 지정되었지만 기본 네트워크 매체가 호출 종료와 함께 데이터 전송을 지원하지 않음을 나타냅니다.
NDIS_STATUS_XXX
호출 관리자가 통화를 종료할 수 없음을 나타냅니다. 반환된 실제 오류는 다른 NDIS 라이브러리 루틴에서 전파된 상태 수 있습니다.

설명

ProtocolCmCloseCall 은 로컬 노드와 원격 노드 간의 연결을 종료하기 위해 해당 미디어에서 필요로 하는 네트워크 제어 디바이스 또는 기타 미디어 관련 행위자와 통신했습니다. 호출 관리자가 네트워크 제어 디바이스(예: 네트워킹 스위치)와 통신해야 하는 경우 ProtocolBindAdapterEx 함수에서 설정한 네트워크 제어 디바이스에 대한 가상 연결을 사용해야 합니다. 독립 실행형 통화 관리자는 NdisCoSendNetBufferLists를 호출하여 이러한 네트워크 디바이스와 통신합니다. 통합 통화 관리 지원이 있는 미니포트 드라이버는 NdisCoSendNetBufferLists를 호출하지 않습니다. 대신 네트워크를 통해 직접 데이터를 전송합니다.

CloseDataNULL이 아니고 연결 종료 시 데이터 전송이 이 호출 관리자가 처리하는 미디어에서 지원되는 경우 호출 관리자는 호출 종료를 완료하기 전에 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

추가 정보

NdisClMakeCall

NdisCmDeactivateVc

NdisCoSendNetBufferLists

ProtocolCmMakeCall