Compartilhar via


estrutura RPC_INTERFACE_TEMPLATE (rpcdce.h)

A estrutura de RPC_INTERFACE_TEMPLATE define uma interface do servidor do grupo de interfaces RPC.

Sintaxe

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_CSTR           Annotation;
  void               *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATE, *PRPC_INTERFACE_TEMPLATE;

Membros

Version

Esse campo é reservado e deve ser definido como 0.

IfSpec

Estrutura gerada por MIDL que define a interface a ser registrada.

MgrTypeUuid

Ponteiro para um UUID a ser associado ao MgrEpv. NULL ou um UUID nulo registra IfSpec com uma UUID nula.

MgrEpv

Ponteiro para uma estrutura RPC_MGR_EPV que contém o EPV (vetor de ponto de entrada) das rotinas do gerente. Se NULL, o EPV padrão gerado por MIDL será usado.

Flags

Sinalizadores. Para obter uma lista de valores de sinalizador, consulte Sinalizadores de registro de interface. As interfaces do grupo de interfaces são sempre tratadas como escuta automática.

MaxCalls

Número máximo de solicitações simultâneas de chamada de procedimento remoto que o servidor pode aceitar nessa interface. A biblioteca de tempo de execução RPC faz seu melhor esforço para garantir que o servidor não permita solicitações de chamada mais simultâneas do que o número de chamadas especificadas em MaxCalls. No entanto, o número real pode ser maior que MaxCalls e pode variar para cada sequência de protocolo.

As chamadas em outras interfaces são regidas pelo valor do parâmetro MaxCalls de todo o processo especificado em RpcServerListen.

Se o número de chamadas simultâneas não for uma preocupação, um desempenho ligeiramente melhor do lado do servidor poderá ser obtido especificando o valor padrão usando RPC_C_LISTEN_MAX_CALLS_DEFAULT. Isso alivia o ambiente de tempo de execução do RPC de impor uma restrição desnecessária.

MaxRpcSize

Tamanho máximo, em bytes, de blocos de dados de entrada. MaxRpcSize pode ser usado para ajudar a evitar ataques mal-intencionados de negação de serviço. Se o bloco de dados de uma chamada de procedimento remoto for maior que MaxRpcSize, a biblioteca de tempo de execução RPC rejeitará a chamada e enviará um erro de RPC_S_ACCESS_DENIED para o cliente. Especificar um valor de (int sem sinal) –1 no MaxRpcSize remove o limite do tamanho dos blocos de dados de entrada. Esse parâmetro não tem efeito sobre as chamadas feitas sobre o protocolo ncalrpc .

IfCallback

Um ponteiro para um RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN função de retorno de chamada de segurança ou NULL para nenhum retorno de chamada. Cada interface registrada pode ter uma função de retorno de chamada diferente.

UuidVector

Ponteiro para um vetor de UUIDs de objeto oferecidos pelo servidor a serem registrados com o mapeador de ponto de extremidade RPC. O aplicativo de servidor constrói esse vetor. NULL indica que não há UUIDs de objeto para registrar.

Annotation

Ponteiro para o comentário de cadeia de caracteres aplicado a cada elemento de produto cruzado adicionado ao banco de dados de mapa de ponto de extremidade local. A cadeia de caracteres pode ter até 64 caracteres, incluindo o caractere de terminação nulo. Especifique um valor nulo ou uma cadeia de caracteres terminada em nulo ("\0") se não houver nenhuma cadeia de caracteres de anotação.

A cadeia de caracteres de anotação é usada apenas por aplicativos para obter informações. O RPC não usa essa cadeia de caracteres para determinar com qual instância de servidor um cliente se comunica ou para enumerar elementos no banco de dados de mapa de ponto de extremidade.

SecurityDescriptor

Descritor de segurança opcional que descreve quais clientes têm o direito de acessar a interface.

Comentários

Para registrar uma interface, o servidor fornece as seguintes informações:

  • Especificação da interface A especificação da interface é uma estrutura de dados gerada pelo compilador MIDL.
  • Tipo de gerenciador UUID e EPV do gerente O tipo de gerenciador UUID e o EPV do gerente determinam qual rotina de gerente é executada quando um servidor recebe uma solicitação de chamada de procedimento remoto de um cliente. Para cada implementação de uma interface oferecida por um servidor, ela deve registrar um EPV de gerenciador separado. Observe que, ao especificar um UUID de tipo de gerenciador não nulo, o servidor também deve chamar RpcObjectSetType para registrar objetos desse tipo não nulo.

Todas as interfaces do grupo de interfaces são tratadas como escuta automática. O runtime começa a escutar chamadas assim que o grupo de interfaces é ativado. As chamadas para RpcServerListen e RpcMgmtStopServerListening não afetam a interface nem uma chamada para RpcServerUnregisterIf com IfSpec definido como NULL.

Especificar uma função de retorno de chamada de segurança no IfCallback permite que o aplicativo de servidor restrinja o acesso a suas interfaces em uma base de cliente individual. Ou seja, por padrão, a segurança é opcional; o tempo de execução do servidor enviará chamadas não simultâneas mesmo se o servidor tiver chamado RpcServerRegisterAuthInfo. Se o servidor quiser aceitar apenas clientes autenticados, uma função de retorno de chamada de interface deverá chamar RpcBindingInqAuthClient, RpcGetAuthorizationContextForClient ou RpcServerInqCallAttributes para recuperar o nível de segurança ou tentar representar o cliente com RpcImpersonateClient. Ele também pode especificar o sinalizador RPC_IF_ALLOW_SECURE_ONLY em Sinalizadores para rejeitar chamadas não autenticadas.

Quando um aplicativo de servidor especifica uma função de retorno de chamada de segurança para suas interfaces no IfCallback, o tempo de execução do RPC rejeita automaticamente chamadas sem informações de autenticação para essa interface. Além disso, o tempo de execução registra as interfaces usadas por cada cliente. Quando um cliente faz um RPC para uma interface que não foi usada durante a sessão de comunicação atual, a biblioteca de tempo de execução do RPC chama a função de retorno de chamada de segurança da interface. Especificar RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH em Sinalizadores impedirá a rejeição automática de clientes não autenticados. Observe que as chamadas na sessão de segurança NULL podem ter informações de autenticação, mesmo que venham de clientes anônimos. Portanto, a existência de um retorno de chamada por si só não é suficiente para impedir que clientes anônimos se conectem; A função de retorno de chamada de segurança deve marcar para isso ou o sinalizador RPC_IF_ALLOW_SECURE_ONLY deve ser usado. RPC_IF_ALLOW_SECURE_ONLY rejeita chamadas de sessão nulas somente no Windows XP e versões posteriores do Windows.

Para obter a assinatura da função de retorno de chamada, consulte RPC_IF_CALLBACK_FN.

A função de retorno de chamada em IfCallback deverá retornar RPC_S_OK se o cliente tiver permissão para chamar métodos nessa interface. Qualquer outro código de retorno fará com que o cliente receba a exceção RPC_S_ACCESS_DENIED.

Em alguns casos, o tempo de execução do RPC pode chamar a função de retorno de chamada de segurança mais de uma vez por cliente, por interface. A função de retorno de chamada deve ser capaz de lidar com essa possibilidade.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2012 [somente aplicativos da área de trabalho]
Cabeçalho rpcdce.h (inclua Rpc.h)

Confira também

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate