Condividi tramite


struttura RPC_INTERFACE_TEMPLATE (rpcdce.h)

La struttura RPC_INTERFACE_TEMPLATE definisce un'interfaccia del 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_TEMPLATE, *PRPC_INTERFACE_TEMPLATE;

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 UUID nil registra IfSpec con un UUID nil.

MgrEpv

Puntatore a una struttura RPC_MGR_EPV che contiene il vettore del punto di ingresso (EPV) delle routine di gestione. Se NULL, viene utilizzato l'EPV predefinito generato da MIDL.

Flags

Bandiere. Per un elenco dei valori dei 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 di routine remota simultanee che il server può accettare in questa interfaccia. La libreria di runtime RPC esegue il massimo sforzo per garantire che il server non consenta più 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 protocollo.

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 lato server leggermente migliori specificando il valore predefinito usando RPC_C_LISTEN_MAX_CALLS_DEFAULT. In questo modo, l'ambiente di runtime RPC evita l'applicazione di una restrizione non necessaria.

MaxRpcSize

Dimensioni massime, in byte, dei blocchi di dati in ingresso. MaxRpcSize può essere usato per prevenire attacchi Denial of Service dannosi. Se il blocco di 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. Se si specifica un valore (unsigned int) -1 in MaxRpcSize , viene rimosso il limite per le dimensioni dei blocchi di dati in ingresso. Questo parametro non ha alcun effetto sulle chiamate effettuate sul protocollo ncalrpc .

IfCallback

Puntatore a una RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN funzione di callback di sicurezza 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 di stringa di caratteri applicato a ogni elemento cross-product aggiunto al database endpoint-map locale. La stringa può contenere fino a 64 caratteri, incluso il carattere di terminazione Null. Specificare un valore Null o una stringa con terminazione Null ("\0") se non è presente alcuna stringa di annotazione.

La stringa di annotazione viene utilizzata dalle applicazioni solo per informazioni. RPC non usa questa stringa per determinare con quale istanza del server un client comunica o per enumerare gli elementi nel database endpoint-map.

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 manager EPV Il tipo di gestore UUID e il manager EPV determinano la routine di gestione 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 tipo di gestore diverso da zero, l'UUID del server deve anche chiamare 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 impostato su NULL.

Se si specifica una funzione di callback di sicurezza in IfCallback , l'applicazione server può limitare l'accesso alle interfacce in base a un singolo client. Ovvero, per impostazione predefinita, la sicurezza è facoltativa; Il runtime del server 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 le 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, il runtime registra le interfacce usate da ogni client. Quando un client effettua una rpc a un'interfaccia che non è stata utilizzata durante la sessione di comunicazione corrente, la libreria di runtime RPC chiama la funzione di callback di sicurezza dell'interfaccia. Se si specifica RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH in Flag, si impedisce 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 solo non è sufficiente per impedire ai client anonimi di connettersi; 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 può chiamare i metodi in questa interfaccia. Qualsiasi altro codice restituito causerà la ricezione dell'eccezione RPC_S_ACCESS_DENIED da parte del client.

In alcuni casi, il tempo di esecuzione RPC può chiamare la funzione di callback di sicurezza più volte per ogni client, per ogni interfaccia. La funzione di callback deve essere in grado di gestire questa possibilità.

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