다음을 통해 공유


RpcServerRegisterIf2 함수(rpcdce.h)

RpcServerRegisterIf2 함수는 RPC 런타임 라이브러리에 인터페이스를 등록합니다.

구문

RPC_STATUS RpcServerRegisterIf2(
  RPC_IF_HANDLE      IfSpec,
  UUID               *MgrTypeUuid,
  RPC_MGR_EPV        *MgrEpv,
  unsigned int       Flags,
  unsigned int       MaxCalls,
  unsigned int       MaxRpcSize,
  RPC_IF_CALLBACK_FN *IfCallbackFn
);

매개 변수

IfSpec

등록할 인터페이스를 나타내는 MIDL 생성 구조체입니다.

MgrTypeUuid

MgrEpv 매개 변수와 연결할 UUID 형식에 대한 포인터입니다. null 매개 변수 값(또는 nil UUID)을 지정하면 IfSpec이 nil 형식 UUID로 등록됩니다.

MgrEpv

관리자 루틴의 EPV(진입점 벡터). MIDL에서 생성된 기본 EPV를 사용하려면 null 값을 지정합니다. 자세한 내용은 RPC_MGR_EPV 참조하세요.

Flags

플래그. 플래그 값 목록은 인터페이스 등록 플래그를 참조하세요.

MaxCalls

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

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

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

MaxRpcSize

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

IfCallbackFn

보안 콜백 함수 또는 콜백이 없는 경우 NULL 입니다. 등록된 각 인터페이스에는 다른 콜백 함수가 있을 수 있습니다. 설명 부분을 참조하세요.

반환 값

성공 시 RPC_S_OK 반환합니다.

참고 유효한 오류 코드 목록은 RPC 반환 값을 참조하세요.
 

설명

RpcServerRegisterIf2 함수의 매개 변수 및 효과는 RpcServerRegisterIf 함수의 매개 변수와 효과를 확장합니다. 차이점은 자동 수신 대기 인터페이스를 등록하고 보안 콜백 함수를 지정하는 기능입니다.

서버 애플리케이션 코드는 RpcServerRegisterIf2 를 호출하여 인터페이스를 등록합니다. 인터페이스를 등록하기 위해 서버는 다음 정보를 제공합니다.

  • 인터페이스 사양

    인터페이스 사양은 MIDL 컴파일러에서 생성하는 데이터 구조입니다.

  • 관리자 유형 UUID 및 관리자 EPV

    관리자는 UUID 를 입력하고 관리자 EPV는 서버가 클라이언트에서 원격 프로시저 호출 요청을 받을 때 실행되는 관리자 루틴을 결정합니다. 서버에서 제공하는 인터페이스의 각 구현에 대해 별도의 관리자 EPV를 등록해야 합니다.

    Nil이 아닌 관리자 유형 UUID를 지정할 때 서버는 RpcObjectSetType 을 호출하여 이 nil이 아닌 유형의 개체를 등록해야 합니다.

RPC_IF_AUTOLISTEN 플래그를 지정하면 인터페이스가 자동 수신 대기 인터페이스로 표시됩니다. 런타임은 인터페이스가 등록되는 즉시 호출 수신 대기를 시작하고 인터페이스가 등록 취소되면 수신 대기를 중지합니다. 이 인터페이스에 대한 RpcServerUnregisterIf 호출은 이 인터페이스에서 보류 중인 모든 호출이 완료될 때까지 기다립니다. RpcServerListenRpcMgmtStopServerListening 함수에 대한 호출은 인터페이스에 영향을 주지 않으며 IfSpecNULL 값으로 설정된 RpcServerUnregisterIf 함수를 호출하지도 않습니다. 이렇게 하면 DLL이 기본 애플리케이션의 RPC 상태를 변경하지 않고 RPC 인터페이스를 등록하거나 레지스트리에서 제거할 수 있습니다.

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

서버 애플리케이션이 해당 인터페이스에 대한 보안 콜백 함수를 지정하는 경우 RPC 런타임은 해당 인터페이스에 대한 인증 정보 없이 호출을 자동으로 거부합니다. 또한 런타임은 각 클라이언트가 사용한 인터페이스를 기록합니다. 클라이언트가 현재 통신 세션 중에 사용되지 않은 인터페이스에 RPC를 만드는 경우 RPC 런타임 라이브러리는 인터페이스의 보안 콜백 함수를 호출합니다. RPC_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 참조하세요.

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

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

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 rpcdce.h(Rpc.h 포함)
라이브러리 Rpcrt4.lib
DLL Rpcrt4.dll

추가 정보

인터페이스 등록

RpcGetAuthorizationContextForClient

RpcServerRegisterIf

RpcServerRegisterIf3

RpcServerRegisterIfEx

RpcServerUnregisterIf

RpcServerUnregisterIfEx