Compartilhar via


estrutura RPC_INTERFACE_TEMPLATEW (rpcdce.h)

A estrutura RPC_INTERFACE_TEMPLATE define uma interface do servidor do grupo de interface 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_WSTR           Annotation;
  void               *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEW, *PRPC_INTERFACE_TEMPLATEW;

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 a MgrEpv . NULL ou um UUID de nulo registra IfSpec com umUUID zero .

MgrEpv

Ponteiro para uma estrutura de RPC_MGR_EPV que contém o EPV (vetor de ponto de entrada) das rotinas de 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 de 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 podem ser usados para ajudar a evitar ataques de negação de serviço mal-intencionados. Se o bloco de dados de uma chamada de procedimento remoto for maior que MaxRpcSize, a biblioteca de tempo de execução do RPC rejeitará a chamada e enviará um erro RPC_S_ACCESS_DENIED ao cliente. Especificar um valor de (int não assinado) –1 em MaxRpcSize remove o limite do tamanho dos blocos de dados de entrada. Esse parâmetro não tem efeito sobre as chamadas feitas no protocolo ncalrpc.

IfCallback

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

UuidVector

Ponteiro para um vetor de objeto UUIDs 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á nenhum objeto UUIDs 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 encerramento 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.

Observações

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

  • Especificação da interface A especificação da interface é uma estrutura de dados que o compilador MIDL gera.
  • Tipo de gerenciador UUID e EPV do gerente O tipo de gerente 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 tipo de gerenciador não nulo UUID, o servidor também deve chamar RpcObjectSetType para registrar objetos desse tipo não nulo.

Todas as interfaces de grupo de interfaces são tratadas como de escuta automática. O runtime começa a escutar chamadas assim que o grupo de interface é 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 em IfCallback permite que o aplicativo servidor restrinja o acesso às 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 deve chamar RpcBindingInqAuthClient, RpcGetAuthorizationContextForClientou 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 Flags 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 ele não usou 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 verificar 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.

Nota

O cabeçalho rpcdce.h define RPC_INTERFACE_TEMPLATE como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

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

Consulte também

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate