PROTOCOL_CL_MAKE_CALL_COMPLETE 콜백 함수(ndis.h)

ProtocolClMakeCallComplete 함수는 나가는 호출을 하는 연결 지향 NDIS 클라이언트에서 사용됩니다. 이러한 클라이언트에는 NdisClMakeCall로 시작하는 비동기 작업을 완료하려면 ProtocolClMakeCallComplete 함수가 있어야 합니다. 그렇지 않으면 이러한 프로토콜 드라이버의 등록된 ProtocolClMakeCallComplete 함수는 단순히 제어를 반환할 수 있습니다.

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

구문

PROTOCOL_CL_MAKE_CALL_COMPLETE ProtocolClMakeCallComplete;

void ProtocolClMakeCallComplete(
  [in]           NDIS_STATUS Status,
  [in]           NDIS_HANDLE ProtocolVcContext,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in]           PCO_CALL_PARAMETERS CallParameters
)
{...}

매개 변수

[in] Status

다음 중 하나일 수 있는 NdisClMakeCall에 대한 클라이언트의 원래 호출의 최종 상태 지정합니다.

NDIS_STATUS_SUCCESS

가상 연결을 설정하려는 클라이언트의 시도가 성공했습니다. 따라서 클라이언트는 NdisCoCreateVc에서 반환된 NdisVcHandle을 사용하여 활성 VC에서 전송을 진행할 수 있습니다. 이 경우 클라이언트는 ProtocolVcContext 의 VC별 컨텍스트 영역에 저장됩니다.

NDIS_STATUS_RESOURCES

NDIS, 호출 관리자 또는 기본 드라이버가 연결을 설정하기에 충분한 리소스를 할당할 수 없습니다.

NDIS_STATUS_XXX

호출 관리자 또는 기본 미니포트 드라이버가 활성 연결을 설정하지 못했고 NDIS는 이 드라이버 결정 실패 상태 클라이언트에 전파했습니다.

[in] ProtocolVcContext

NdisCoCreateVc를 호출하여 나가는 호출에 대한 VC를 설정할 때 클라이언트가 원래 NDIS에 제공한 클라이언트의 VC별 컨텍스트 영역에 대한 핸들을 지정합니다.

[in, optional] NdisPartyHandle

Status가 NDIS_STATUS_SUCCESS 클라이언트가 명시적 ProtocolPartyContext 핸들을 NdisClMakeCall에 전달하여 다중 포인트 VC를 만든 경우 유효한 NdisPartyHandle 입니다. 그렇지 않으면 이 매개 변수는 NULL입니다.

ProtocolClMakeCallComplete 는 일반적으로 클라이언트의 파티별 컨텍스트 영역에 유효한 입력 NdisPartyHandle을 저장해야 합니다. 클라이언트는 이 파티를 참조하는 NdisClDropParty 또는 NdisCloseCall 에 대한 후속 호출을 수행할 경우(또는 언제) 이 핸들을 사용해야 합니다.

[in] CallParameters

버퍼링된 CO_CALL_PARAMETERS 구조체에 대한 포인터입니다. 클라이언트는 이 버퍼를 할당하고 이 포인터를 NdisClMakeCall에 전달하기 전에 클라이언트에서 결정한 데이터로 이 구조를 초기화했습니다. 클라이언트의 요청을 처리하는 동안 호출 관리자는 네트워크 또는 신호 피어와의 협상 결과를 반영하도록 이 데이터를 수정할 수 있습니다.

반환 값

없음

설명

ProtocolClMakeCallComplete 호출은 호출 관리자가 NdisClMakeCall을 사용하여 가상 연결을 설정하기 위한 클라이언트의 요청 처리를 완료했음을 나타냅니다.

나가는 호출을 설정하려는 클라이언트의 시도가 실패한 경우(입력 상태는 NDIS_STATUS_SUCCESS 제외) ProtocolClMakeCallComplete 는 다음을 수행해야 합니다.

  • ProtocolPartyContext 영역(있는 경우)과 클라이언트가 할당한 CallParameters의 버퍼를 해제하거나 다시 사용할 준비를 합니다.
  • NdisCoDeleteVc를 호출하여 클라이언트에서 만든 VC를 분해하고 클라이언트 할당 ProtocolVcContext 영역을 해제하거나 다시 사용할 준비를 합니다.
그렇지 않으면 ProtocolClMakeCallComplete 에서 다음을 수행해야 합니다.
  1. CallParameters에서 구조체의 Flags 멤버를 확인하여 호출 관리자가 클라이언트에서 제공한 호출 매개 변수를 수정했음을 나타내는 CALL_PARAMETERS_CHANGED 설정되었는지 확인합니다.
  2. 그렇다면 CallParameters 의 데이터를 검사하여 이 연결에 허용되는지 여부를 확인합니다.

    예를 들어 클라이언트는 활성 VC에 대한 버퍼링된 호출 매개 변수를 유지하고, 다중 포인트 VC인 경우 NdisPartyHandle 을 저장하고, 일반적으로 지정된 호출 매개 변수가 만족스러운 경우 클라이언트가 활성 VC에서 후속 전송 및 기타 작업을 수행할 수 있도록 할 수 있습니다.

  3. 그렇지 않은 경우 신호 프로토콜은 클라이언트가 호출 관리자를 사용하여 허용되는 호출 매개 변수에 대해 재협상을 시도할 수 있는지 여부를 결정합니다.

    예를 들어 특정 호출 관리자는 이러한 상황에서 클라이언트가 NdisClModifyCallQoS 를 한 번 이상 호출하도록 허용할 수 있습니다.

  4. CM 수정된 호출 매개 변수가 허용되지 않으며 추가 재협상이 불가능한 경우 ProtocolClMakeCallCompleteNdisCloseCall을 사용하여 호출을 중단해야 합니다.

    이 경우 ProtocolClMakeCallCompleteNdisCloseCall에서 반환 시 클라이언트 할당 리소스를 해제하려고 시도해서는 안 되지만 단순히 제어를 반환할 수 있습니다. 대신 클라이언트는 ProtocolCloseCallComplete 함수 내에서 할당된 리소스를 해제하거나 다시 사용할 수 있도록 준비해야 합니다.

ProtocolClMakeCallComplete 함수를 정의하려면 먼저 정의 중인 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾을 수 있으며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 이름이 " MyClMakeCallComplete"인 ProtocolClMakeCallComplete 함수를 정의하려면 다음 코드 예제와 같이 PROTOCOL_CL_MAKE_CALL_COMPLETE 형식을 사용합니다.

PROTOCOL_CL_MAKE_CALL_COMPLETE MyClMakeCallComplete;

그런 다음 다음과 같이 함수를 구현합니다.

_Use_decl_annotations_
VOID
 MyClMakeCallComplete(
    NDIS_STATUS  Status,
    NDIS_HANDLE  ProtocolVcContext,
    NDIS_HANDLE  NdisPartyHandle,
    PCO_CALL_PARAMETERS  CallParameters
    )
  {...}

PROTOCOL_CL_MAKE_CALL_COMPLETE 함수 형식은 Ndis.h 헤더 파일에 정의되어 있습니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 PROTOCOL_CL_MAKE_CALL_COMPLETE 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언 요구 사항에 대한 자세한 내용은 NDIS 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요.

Use_decl_annotations 대한 자세한 내용은 함수 동작 주석 지정을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista에서 NDIS 6.0 및 NDIS 5.1 드라이버(ProtocolClMakeCallComplete(NDIS 5.1 참조))에 대해 지원됩니다. Windows XP의 NDIS 5.1 드라이버(ProtocolClMakeCallComplete(NDIS 5.1 참조))에 대해 지원됩니다.
대상 플랫폼 Windows
헤더 ndis.h(Ndis.h 포함)
IRQL <= DISPATCH_LEVEL

추가 정보

CO_CALL_PARAMETERS

NdisClCloseCall

NdisClDropParty

NdisClMakeCall

NdisCmMakeCallComplete

NdisCoCreateVc

NdisCoDeleteVc

NdisFreeMemory

NdisFreeToNPagedLookasideList

NdisMCmMakeCallComplete

ProtocolCloseCallComplete

ProtocolCmMakeCall