다음을 통해 공유


RPC_CALL_ATTRIBUTES_V1_A 구조체(rpcasync.h)

RPC_CALL_ATTRIBUTES_V1 구조체는 RpcServerInqCallAttributes 함수에 매개 변수를 제공합니다. Windows XP 및 Windows Server 2003 운영 체제용 ANSI 및 유니코드 버전에서 구현됩니다.

구문

typedef struct tagRPC_CALL_ATTRIBUTES_V1_A {
  unsigned int  Version;
  unsigned long Flags;
  unsigned long ServerPrincipalNameBufferLength;
  unsigned char *ServerPrincipalName;
  unsigned long ClientPrincipalNameBufferLength;
  unsigned char *ClientPrincipalName;
  unsigned long AuthenticationLevel;
  unsigned long AuthenticationService;
  BOOL          NullSession;
} RPC_CALL_ATTRIBUTES_V1_A;

멤버

Version

호출 애플리케이션에서 사용되는 RpcServerInqCallAttributes 함수의 버전입니다. 설명 부분을 참조하세요.

Flags

RPC_QUERY_SERVER_PRINCIPAL_NAME 또는 RPC_QUERY_CLIENT_PRINCIPAL_NAME 요청할 유효한 플래그를 지정하는 비트 마스크입니다. 설명 부분을 참조하세요.

ServerPrincipalNameBufferLength

ServerPrincipalName의 길이(바이트)입니다. 부족한 경우 ServerPrincipalName 은 변경되지 않으며 ServerPrincipalNameBufferLength 는 종료 되는 NULL 문자를 포함하여 필요한 버퍼 길이를 나타내고 ERROR_MORE_DATA 반환됩니다. ServerPrincipalNameBufferLength가 필요 이상으로 길면 반환 시 종결 NULL 문자를 포함하여 사용된 실제 길이(바이트)로 설정됩니다. 설명 부분을 참조하세요.

프로토콜 시퀀스가 서버 보안 주체 이름 검색을 지원하지 않으면 반환 시 ServerPrincipalNameBufferLength 가 0으로 설정되고 ServerPrincipalName 이 가리키는 버퍼는 수정되지 않습니다. Windows XP: ncacn_* 프로토콜 시퀀스 그룹만 서버 보안 주체 이름 검색을 지원합니다.

RPC_QUERY_SERVER_PRINCIPAL_NAME 플래그를 지정하지 않으면 ServerPrincipalNameBufferLength 는 무시됩니다. ServerPrincipalNameBufferLength가 0이 아니고 ServerPrincipalNameNULL이면 ERROR_INVALID_PARAMETER 반환됩니다.

ServerPrincipalName

플래그에서 요청되고 프로토콜 시퀀스에서 지원되는 경우 서버 보안 주체 이름에 대한 포인터입니다. RPC_S_OK 또는 ERROR_MORE_DATA 이외의 반환 값이 있으면 ServerPrincipalName 의 콘텐츠가 정의되지 않았으며 RPC에 의해 수정되었을 수 있습니다.

ClientPrincipalNameBufferLength

ClientPrincipalName이 가리키는 버퍼의 길이(바이트)입니다. 부족한 경우 ClientPrincipalName 은 변경되지 않으며 ClientPrincipalNameBufferLength 는 종료 되는 NULL 문자를 포함하여 필요한 버퍼 길이를 나타내고 ERROR_MORE_DATA 반환됩니다. ClientPrincipalNameBufferLength가 필요 이상으로 길면 반환 시 종결 NULL 문자를 포함하여 사용된 실제 길이(바이트)로 설정됩니다.

프로토콜 시퀀스가 클라이언트 보안 주체 이름 검색을 지원하지 않으면 반환 시 ClientPrincipalNameBufferLength 가 0으로 설정되고 ClientPrincipalName 이 가리키는 버퍼는 수정되지 않습니다. Windows XP: ncalrpc 프로토콜 시퀀스만 클라이언트 보안 주체 이름 검색을 지원합니다.

RPC_QUERY_CLIENT_PRINCIPAL_NAME 플래그를 지정하지 않으면 ClientPrincipalNameBufferLength 는 무시됩니다. ClientPrincipalNameBufferLength가 0이 아니고 ClientPrincipalNameNULL이면 ERROR_INVALID_PARAMETER 반환됩니다.

ClientPrincipalName

Flags 멤버에서 요청되고 프로토콜 시퀀스에서 지원되는 경우 클라이언트 주체 이름에 대한 포인터입니다. RPC_S_OK 또는 ERROR_MORE_DATA 이외의 반환 값이 있으면 ClientPrincipalName 의 콘텐츠가 정의되지 않으며 RPC에서 수정되었을 수 있습니다.

AuthenticationLevel

호출에 대한 인증 수준입니다. RPC 에서 지원하는 인증 수준은 인증 수준 상수를 참조하세요.

AuthenticationService

원격 프로시저 호출에 사용되는 인증 서비스 또는 보안 공급자입니다.

NullSession

Null 세션이 사용되는지 여부를 지정합니다. 0은 Null 세션을 통해 호출이 오지 않음을 나타냅니다. 다른 값은 Null 세션을 나타냅니다.

설명

RPC_CALL_ATTRIBUTES 구조는 버전 관리 체계를 사용하여 접미사 식별자를 사용하여 새 함수를 도입하지 않고도 RpcServerInqCallAttributes 함수가 새 기능을 통합할 수 있도록 합니다. 예를 들어 헤더에서 간단한 #define 식별되는 번째 버전의 RPC_CALL_ATTRIBUTES 새 멤버를 추가하여 해당 대체 함수를 해제하지 않고도 RpcServerInqCallAttributes 함수의 이후 버전에 기본 제공되는 새 기능을 용이하게 할 수 있습니다.

Version 멤버는 호출 애플리케이션에서 사용하는 RPC_CALL_ATTRIBUTES 구조체(현재 RPC_CALL_ATTRIBUTES_V1 또는 RPC_CALL_ATTRIBUTES_V2)의 버전을 나타냅니다. 이 ID를 사용하면 RPC 런타임에서 가장 최신 버전의 구조를 사용하지 않는 애플리케이션에 대해 이전 버전과의 호환성을 제공할 수 있습니다.

Flags 멤버에서 RPC_QUERY_SERVER_PRINCIPAL_NAME 지정하면 RpcServerInqCallAttributesServerPrincipalName에서 서버 주체 이름을 반환하도록 지시합니다. RPC_QUERY_SERVER_PRINCIPAL_NAME 지정하지 않으면 RpcServerInqCallAttributesServerPrincipalName 에 전달된 포인터를 수정하지 않으며 해당 메모리 위치에 아무것도 저장하지 않습니다. Flags 멤버에서 RPC_QUERY_CLIENT_PRINCIPAL_NAME 지정하면 RpcServerInqCallAttributesClientPrincipalName에서 클라이언트 주체 이름을 반환하도록 지시합니다. RPC_QUERY_CLIENT_PRINCIPAL_NAME 지정하지 않으면 RpcServerInqCallAttributesClientPrincipalName 에 전달된 포인터를 수정하지 않으며 해당 메모리 위치에 아무것도 저장하지 않습니다.

클라이언트 및 서버 보안 주체 이름을 모두 검색할 때 가장 좋은 처리 메커니즘은 ClientPrincipalNameBufferLengthServerPrincipalNameBufferLength의 길이를 저장하는 것이며, ERROR_MORE_DATA 반환되는 경우 저장된 길이를 해당 멤버에 반환된 길이와 비교합니다. 저장된 값이 반환된 값보다 작거나 같은 멤버가 성공적으로 반환되어 다른 멤버에 버퍼가 부족했음을 나타냅니다. 후속 호출에서 성공적으로 반환된 보안 주체 이름에 대한 플래그를 생략합니다. 이렇게 하면 성공적으로 반환된 보안 주체 이름의 다른 검색 및 복사본과 관련된 처리가 방지됩니다.

RPC_CALL_ATTRIBUTES_V1 구조체는 일반적으로 두 가지 방법으로 호출됩니다.

  • 첫 번째 방법: 첫 번째 RpcServerInqCallAttributes 함수 호출에서 ServerPrincipalNameBufferLength 또는 ClientPrincipalNameBufferLength 멤버에 대해 0이 지정되어 필요한 버퍼 길이를 검색하거나 프로토콜이 주체 이름 반환을 지원하는지 여부를 확인합니다. 필요한 버퍼 길이를 검색하면 버퍼에 필요한 길이가 할당되고 버퍼의 실제 길이를 가져오기 위해 두 번째 호출이 이루어집니다.
  • 두 번째 방법: 호출자는 스택에 자주 할당되는 적절한 버퍼로 시작하고, ERROR_MORE_DATA 반환되면 필요한 길이의 버퍼가 할당되고 RpcServerInqCallAttributes 함수가 다시 호출됩니다.
두 번째 메서드는 호출자가 메모리 할당을 수행할 필요가 없으므로 대부분의 경우 최상의 성능을 제공합니다.

예제

RPC_CALL_ATTRIBUTES CallAttributes;  // this maps to RPC_CALL_ATTRIBUTES_V1

memset(&CallAttributes, 0, sizeof(CallAttributes));
CallAttributes.Version = RPC_CALL_ATTRIBUTES_VERSION;    // maps to 1
CallAttributes.Flags = ;//....
Status = RpcServerInqCallAttributes(0, &CallAttributes);

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
머리글 rpcasync.h(Rpc.h 포함)

추가 정보

인증 수준 상수

RpcServerInqCallAttributes