다음을 통해 공유


RPC_INTERFACE_TEMPLATEW 구조체(rpcdce.h)

RPC_INTERFACE_TEMPLATE 구조는 RPC 인터페이스 그룹 서버 인터페이스를 정의합니다.

통사론

typedef struct {
  unsigned long      Version;
  RPC_IF_HANDLE      IfSpec;
  UUID               *MgrTypeUuid;
  RPC_MGR_EPV        *MgrEpv;
  unsigned int       Flags;
  unsigned int       MaxCalls;
  unsigned int       MaxRpcSize;
  RPC_IF_CALLBACK_FN *IfCallback;
  UUID_VECTOR        *UuidVector;
  RPC_WSTR           Annotation;
  void               *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEW, *PRPC_INTERFACE_TEMPLATEW;

회원

Version

이 필드는 예약되어 있으며 0으로 설정해야 합니다.

IfSpec

등록할 인터페이스를 정의하는 MIDL 생성 구조체입니다.

MgrTypeUuid

MgrEpv연결할 UUID 대한 포인터입니다. NULL 또는 nil UUID Nil UUID사용하여 IfSpec 등록합니다.

MgrEpv

관리자 루틴의 EPV(진입점 벡터)가 포함된 RPC_MGR_EPV 구조체에 대한 포인터입니다. NULL경우 MIDL에서 생성된 기본 EPV가 사용됩니다.

Flags

플래그. 플래그 값 목록은 인터페이스 등록 플래그참조하세요. 인터페이스 그룹 인터페이스는 항상 자동 수신 대기처리됩니다.

MaxCalls

서버가 이 인터페이스에서 수락할 수 있는 동시 원격 프로시저 호출 요청의 최대 수입니다. RPC 런타임 라이브러리는 서버가 MaxCalls지정된 호출 수보다 더 많은 동시 호출 요청을 허용하지 않도록 최선을 다합니다. 그러나 실제 숫자는 maxCalls 보다 클 수 있으며 각 프로토콜 순서에 따라 달라질 수 있습니다.

다른 인터페이스에 대한 호출은 RpcServerListen지정된 프로세스 수준 MaxCalls 매개 변수의 값으로 제어됩니다.

동시 호출 수가 문제가 되지 않는 경우 RPC_C_LISTEN_MAX_CALLS_DEFAULT사용하여 기본값을 지정하여 서버 쪽 성능을 약간 향상할 수 있습니다. 이렇게 하면 RPC 런타임 환경이 불필요한 제한을 적용하지 못하게 됩니다.

MaxRpcSize

들어오는 데이터 블록의 최대 크기(바이트)입니다. MaxRpcSize 사용하여 악의적인 서비스 거부 공격을 방지할 수 있습니다. 원격 프로시저 호출의 데이터 블록이 MaxRpcSize큰 경우 RPC 런타임 라이브러리는 호출을 거부하고 클라이언트에 RPC_S_ACCESS_DENIED 오류를 보냅니다. maxRpcSize (unsigned int) –1 값을 지정하면 들어오는 데이터 블록의 크기에 대한 제한이 제거됩니다. 이 매개 변수는 ncalrpc 프로토콜을 통한 호출에는 영향을 주지 않습니다.

IfCallback

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN 보안 콜백 함수에 대한 포인터이거나 콜백 없이 NULL . 등록된 각 인터페이스에는 다른 콜백 함수가 있을 수 있습니다.

UuidVector

RPC 엔드포인트 매퍼에 등록할 서버에서 제공하는 UUID 개체의 벡터에 대한 포인터입니다. 서버 애플리케이션은 이 벡터를 생성합니다. NULL 등록할 UUID 개체가 없음을 나타냅니다.

Annotation

로컬 엔드포인트 맵 데이터베이스에 추가된 각 교차 제품 요소에 적용되는 문자 문자열 주석에 대한 포인터입니다. 문자열의 길이는 null 종료 문자를 포함하여 최대 64자까지 가능합니다. 주석 문자열이 없으면 null 값 또는 null로 끝나는 문자열("\0")을 지정합니다.

주석 문자열은 정보만을 위해 애플리케이션에서 사용됩니다. RPC는 이 문자열을 사용하여 클라이언트가 통신하는 서버 인스턴스를 결정하거나 엔드포인트 맵 데이터베이스의 요소를 열거하지 않습니다.

SecurityDescriptor

인터페이스에 액세스할 수 있는 권한이 있는 클라이언트를 설명하는 선택적 보안 설명자입니다.

발언

인터페이스를 등록하기 위해 서버는 다음 정보를 제공합니다.

  • 인터페이스 사양 인터페이스 사양은 MIDL 컴파일러가 생성하는 데이터 구조입니다.
  • 관리자 유형 UUID 및 관리자 EPV 관리자 유형은 UUID 관리자 EPV는 서버가 클라이언트에서 원격 프로시저 호출 요청을 수신할 때 실행되는 관리자 루틴을 결정합니다. 서버에서 제공하는 인터페이스의 각 구현에 대해 별도의 관리자 EPV를 등록해야 합니다. nil이 아닌 관리자 유형 UUID지정할 때 서버는 RpcObjectSetType 호출하여 이 nil이 아닌 유형의 개체를 등록해야 합니다.

모든 인터페이스 그룹 인터페이스는 자동 수신 대기처리됩니다. 런타임은 인터페이스 그룹이 활성화되는 즉시 호출 수신 대기를 시작합니다. RpcServerListenRpcMgmtStopServerListening 대한 호출은 인터페이스에 영향을 주지 않으며, IfSpecNULL설정된 RpcServerUnregisterIf 호출하지도 않습니다.

IfCallback 보안 콜백 함수를 지정하면 서버 애플리케이션이 개별 클라이언트 기준으로 인터페이스에 대한 액세스를 제한할 수 있습니다. 즉, 기본적으로 보안은 선택 사항입니다. 서버 런타임은 서버가 RpcServerRegisterAuthInfo호출한 경우에도 보안되지 않은 호출을 디스패치합니다. 서버에서 인증된 클라이언트만 허용하려는 경우 인터페이스 콜백 함수는 RpcBindingInqAuthClient, RpcGetAuthorizationContextForClient또는 RpcServerInqCallAttributes 호출하여 보안 수준을 검색하거나 RpcImpersonateClient사용하여 클라이언트를 가장하려고 시도해야 합니다. 인증되지 않은 호출을 거부하도록 FlagsRPC_IF_ALLOW_SECURE_ONLY 플래그를 지정할 수도 있습니다.

서버 애플리케이션이 IfCallback해당 인터페이스에 대한 보안 콜백 함수를 지정하면 RPC 런타임은 해당 인터페이스에 대한 인증 정보 없이 호출을 자동으로 거부합니다. 또한 런타임은 각 클라이언트가 사용한 인터페이스를 기록합니다. 클라이언트가 현재 통신 세션 중에 사용되지 않은 인터페이스에 RPC를 만드는 경우 RPC 런타임 라이브러리는 인터페이스의 보안 콜백 함수를 호출합니다. FlagsRPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 지정하면 인증되지 않은 클라이언트가 자동으로 거부되지 않습니다. NULL 보안 세션에 대한 호출은 익명 클라이언트에서 온 경우에도 인증 정보를 가질 수 있습니다. 따라서 콜백만 있으면 익명 클라이언트가 연결되지 않도록 할 수 없습니다. 보안 콜백 함수가 이를 확인해야 하거나 RPC_IF_ALLOW_SECURE_ONLY 플래그를 사용해야 합니다. RPC_IF_ALLOW_SECURE_ONLY Windows XP 이상 버전의 Windows에서만 null 세션 호출을 거부합니다.

콜백 함수에 대한 서명은 RPC_IF_CALLBACK_FN참조하세요.

IfCallback 콜백 함수는 클라이언트가 이 인터페이스에서 메서드를 호출할 수 있는 경우 RPC_S_OK 반환해야 합니다. 다른 반환 코드는 클라이언트가 예외 RPC_S_ACCESS_DENIED받도록 합니다.

경우에 따라 RPC 런타임은 인터페이스당 클라이언트당 두 번 이상 보안 콜백 함수를 호출할 수 있습니다. 콜백 함수는 이 가능성을 처리할 수 있어야 합니다.

메모

rpcdce.h 헤더는 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 RPC_INTERFACE_TEMPLATE 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입대한 규칙을 참조하세요.

요구 사항

요구
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱만 해당]
헤더 rpcdce.h(Rpc.h 포함)

참고 항목

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate