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