estrutura RPC_INTERFACE_TEMPLATEA (rpcdce.h)
A estrutura RPC_INTERFACE_TEMPLATE define uma interface de servidor de 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_CSTR Annotation;
void *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEA, *PRPC_INTERFACE_TEMPLATEA;
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 um UUID nulo.
MgrEpv
Ponteiro para uma estrutura de RPC_MGR_EPV que contém o EPV (vetor de ponto de entrada) das rotinas de gerente. Se FOR 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 de grupo de interface são sempre tratadas como escuta automática.
MaxCalls
Número máximo de solicitações de chamada de procedimento remoto simultâneas 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 mais solicitações de chamada 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 em 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 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 RPC rejeitará a chamada e enviará um erro de RPC_S_ACCESS_DENIED ao cliente. Especificar um valor de (unsigned int) –1 em MaxRpcSize remove o limite do tamanho dos blocos de dados de entrada. Esse parâmetro não tem efeito sobre chamadas feitas pelo 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 nula. 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 por aplicativos somente para 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 gerenciador O tipo de gerenciador UUID e o EPV do gerenciador determinam qual rotina de gerenciador é 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 diferente de zero, 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 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 às 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 que o servidor tenha 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 que cada cliente usou. 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 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 em 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.
Observação
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 de pré-processador UNICODE. Misturar o uso do alias neutro de codificação com código que não seja neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Convenções para protótipos de função.
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