다음을 통해 공유


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

CloseData NULL 경우 CloseData버퍼의 길이(바이트)를 지정합니다.

반환 값

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

반환 코드 묘사
NDIS_STATUS_SUCCESS
호출 관리자가 호출을 성공적으로 종료했음을 나타냅니다.
NDIS_STATUS_PENDING
호출 관리자가 호출을 비동기적으로 종료하는 요청을 완료했음을 나타냅니다. 호출 관리자가 연결을 종료하는 데 필요한 모든 작업을 완료한 후 NdisCmCloseCallComplete 호출하여 NDIS에 호출이 닫혔다는 신호를 표시해야 합니다.
NDIS_STATUS_INVALID_DATA
CloseData 지정되었지만 기본 네트워크 매체는 호출 종료와 함께 데이터 전송을 지원하지 않습니다.
NDIS_STATUS_XXX
호출 관리자가 호출을 종료할 수 없음을 나타냅니다. 반환되는 실제 오류는 다른 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

참고 항목

NdisClMakeCall

NdisCmDeactivateVc

NdisCoSendNetBufferLists

ProtocolCmMakeCall