RpcServerRegisterIfEx 함수(rpcdce.h)

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

구문

RPC_STATUS RpcServerRegisterIfEx(
  RPC_IF_HANDLE      IfSpec,
  UUID               *MgrTypeUuid,
  RPC_MGR_EPV        *MgrEpv,
  unsigned int       Flags,
  unsigned int       MaxCalls,
  RPC_IF_CALLBACK_FN *IfCallback
);

매개 변수

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 런타임 환경이 불필요한 제한을 적용하지 않습니다.

IfCallback

보안 콜백 함수 또는 콜백이 없는 경우 NULL 입니다. 등록된 각 인터페이스에는 다른 콜백 함수가 있을 수 있습니다. 자세한 내용은 비고를 참조하세요.

반환 값

성공 시 RPC_S_OK 반환합니다.

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

설명

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

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

  • 인터페이스 사양

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

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

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

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

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

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

서버 애플리케이션이 해당 인터페이스에 대한 보안 콜백 함수를 지정하는 경우 RPC 런타임은 해당 인터페이스에 대한 인증되지 않은 호출을 자동으로 거부합니다. 또한 런타임은 각 클라이언트가 사용한 인터페이스를 기록합니다. 클라이언트가 현재 통신 세션 중에 사용되지 않은 인터페이스에 RPC를 만들면 RPC 런타임 라이브러리는 인터페이스의 보안 콜백 함수를 호출합니다. RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH 플래그를 지정하면 인증되지 않은 클라이언트가 자동으로 거부되지 않습니다.

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

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

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

요구 사항

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

추가 정보

인터페이스 등록

RpcBindingFromStringBinding

RpcBindingSetObject

RpcGetAuthorizationContextForClient

RpcNsBindingExport

RpcNsBindingImportBegin

RpcNsBindingLookupBegin

RpcObjectSetType

RpcServerRegisterIf

RpcServerRegisterIf2

RpcServerRegisterIf3

RpcServerUnregisterIf

RpcServerUnregisterIfEx