Condividi tramite


RPC_INTERFACE_TEMPLATEA struttura (rpcdce.h)

La struttura RPC_INTERFACE_TEMPLATE definisce un'interfaccia server del gruppo di interfacce RPC.

Sintassi

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;

Members

Version

Questo campo è riservato e deve essere impostato su 0.

IfSpec

Struttura generata da MIDL che definisce l'interfaccia da registrare.

MgrTypeUuid

Puntatore a un UUID da associare a MgrEpv. NULL o un UUID nil registra IfSpec con un NIL UUID.

MgrEpv

Puntatore a una struttura RPC_MGR_EPV che contiene il vettore di punti di ingresso (EPV) della routine di gestione. Se viene usato NULL, viene usato l'EPV predefinito generato da MIDL.

Flags

Bandiere. Per un elenco di valori di flag, vedere Flag di registrazione interfaccia. Le interfacce del gruppo di interfacce vengono sempre considerate in ascolto automatico.

MaxCalls

Numero massimo di richieste di chiamata alla procedura remota simultanee che il server può accettare in questa interfaccia. La libreria di runtime RPC rende il suo miglior sforzo per garantire che il server non consenta richieste di chiamata simultanee rispetto al numero di chiamate specificate in MaxCalls. Tuttavia, il numero effettivo può essere maggiore di MaxCalls e può variare per ogni sequenza di protocolli.

Le chiamate su altre interfacce sono regolate dal valore del parametro MaxCalls a livello di processo specificato in RpcServerListen.

Se il numero di chiamate simultanee non è un problema, è possibile ottenere prestazioni leggermente migliori sul lato server specificando il valore predefinito usando RPC_C_LISTEN_MAX_CALLS_DEFAULT. In questo modo, l'ambiente di runtime RPC consente di applicare una restrizione non necessaria.

MaxRpcSize

Dimensioni massime, in byte, di blocchi di dati in ingresso. MaxRpcSize può essere usato per impedire attacchi denial-of-service dannosi. Se il blocco dati di una chiamata di procedura remota è maggiore di MaxRpcSize, la libreria di runtime RPC rifiuta la chiamata e invia un errore di RPC_S_ACCESS_DENIED al client. Specificando un valore di (senza segno int) -1 in MaxRpcSize rimuove il limite per le dimensioni dei blocchi dati in ingresso. Questo parametro non ha alcun effetto sulle chiamate effettuate sul protocollo ncalrpc .

IfCallback

Puntatore a una funzione di callback di sicurezza RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN o NULL per nessun callback. Ogni interfaccia registrata può avere una funzione di callback diversa.

UuidVector

Puntatore a un vettore di UUID oggetto offerto dal server da registrare con il mapper dell'endpoint RPC. L'applicazione server costruisce questo vettore. NULL indica che non sono presenti UUID oggetto da registrare.

Annotation

Puntatore al commento della stringa di caratteri applicato a ogni elemento cross-product aggiunto al database della mappa degli endpoint locale. La stringa può essere fino a 64 caratteri lunghi, incluso il carattere di terminazione Null. Specificare un valore Null o una stringa con terminazione null ("\0") se non esiste alcuna stringa di annotazione.

La stringa di annotazione viene usata solo dalle applicazioni per informazioni. RPC non usa questa stringa per determinare l'istanza del server con cui un client comunica o per enumerare gli elementi nel database della mappa degli endpoint.

SecurityDescriptor

Descrittore di sicurezza facoltativo che descrive quali client hanno il diritto di accedere all'interfaccia.

Commenti

Per registrare un'interfaccia, il server fornisce le informazioni seguenti:

  • Specifica dell'interfaccia La specifica dell'interfaccia è una struttura di dati generata dal compilatore MIDL.
  • Tipo di gestore UUID e gestione EPV Il tipo di gestione UUID e il gestore EPV determinano quale routine di gestione viene eseguita quando un server riceve una richiesta di chiamata di procedura remota da un client. Per ogni implementazione di un'interfaccia offerta da un server, deve registrare un EPV di gestione separato. Si noti che quando si specifica un UUID non nil, il server deve chiamare anche RpcObjectSetType per registrare gli oggetti di questo tipo non nil.

Tutte le interfacce del gruppo di interfacce vengono considerate in ascolto automatico. Il runtime inizia ad ascoltare le chiamate non appena viene attivato il gruppo di interfacce. Le chiamate a RpcServerListen e RpcMgmtStopServerListening non influiscono sull'interfaccia, né esegue una chiamata a RpcServerUnregisterIf con IfSpec impostata su NULL.

La specifica di una funzione di callback di sicurezza in IfCallback consente all'applicazione server di limitare l'accesso alle interfacce in base a un singolo client. Per impostazione predefinita, la sicurezza è facoltativa; il server run-time invierà chiamate non protette anche se il server ha chiamato RpcServerRegisterAuthInfo. Se il server vuole accettare solo client autenticati, una funzione di callback dell'interfaccia deve chiamare RpcBindingInqAuthClient, RpcGetAuthorizationContextForClient o RpcServerInqCallAttributes per recuperare il livello di sicurezza o tentare di rappresentare il client con RpcImpersonateClient. Può anche specificare il flag RPC_IF_ALLOW_SECURE_ONLY in Flag per rifiutare chiamate non autenticate.

Quando un'applicazione server specifica una funzione di callback di sicurezza per le relative interfacce in IfCallback, il tempo di esecuzione RPC rifiuta automaticamente le chiamate senza informazioni di autenticazione a tale interfaccia. Inoltre, l'esecuzione registra le interfacce usate da ogni client. Quando un client esegue un'interfaccia RPC a un'interfaccia non usata durante la sessione di comunicazione corrente, la libreria di runtime RPC chiama la funzione di callback della sicurezza dell'interfaccia. Se si specifica RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH in Flag, verrà impedito il rifiuto automatico dei client non autenticati. Si noti che le chiamate nella sessione di sicurezza NULL possono avere informazioni di autenticazione, anche se provengono da client anonimi. Pertanto, l'esistenza di un callback da sola non è sufficiente per impedire la connessione dei client anonimi; la funzione di callback di sicurezza deve verificarla oppure è necessario usare il flag di RPC_IF_ALLOW_SECURE_ONLY. RPC_IF_ALLOW_SECURE_ONLY rifiuta le chiamate di sessione Null solo in Windows XP e versioni successive di Windows.

Per la firma per la funzione di callback, vedere RPC_IF_CALLBACK_FN.

La funzione di callback in IfCallback deve restituire RPC_S_OK se il client è autorizzato a chiamare i metodi in questa interfaccia. Qualsiasi altro codice restituito causerà che il client riceva l'eccezione RPC_S_ACCESS_DENIED.

In alcuni casi, l'ora di esecuzione RPC può chiamare la funzione di callback di sicurezza più di una volta per client, per interfaccia. La funzione di callback deve essere in grado di gestire questa possibilità.

Nota

L'intestazione rpcdce.h definisce RPC_INTERFACE_TEMPLATE come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias di codifica neutrale con il codice che non è neutrale dalla codifica può causare errori di corrispondenza che causano errori di compilazione o runtime. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

Requisiti

Requisito Valore
Client minimo supportato Windows 8 [solo app desktop]
Server minimo supportato Windows Server 2012 [solo app desktop]
Intestazione rpcdce.h (include Rpc.h)

Vedi anche

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

RpcServerInqBindings

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate