struttura RPC_INTERFACE_TEMPLATEW (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_WSTR Annotation;
void *SecurityDescriptor;
} RPC_INTERFACE_TEMPLATEW, *PRPC_INTERFACE_TEMPLATEW;
Membri
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
MgrEpv
Puntatore a una struttura RPC_MGR_EPV che contiene il vettore del punto di ingresso (EPV) delle routine di gestione. Se NULL, viene usato l'EPV predefinito generato da MIDL.
Flags
Bandiere. Per un elenco dei valori dei flag, vedere flag di registrazione dell'interfaccia . Le interfacce del gruppo di interfacce vengono sempre considerate come 'ascolto automatico.
MaxCalls
Numero massimo di richieste di chiamata di procedura remota simultanee che il server può accettare in questa interfaccia. La libreria di runtime RPC fa del suo meglio 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 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 impedisce 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 (senza segno 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 funzione di callback di sicurezza RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN o NULL senza callback. Ogni interfaccia registrata può avere una funzione di callback diversa.
UuidVector
Puntatore a un vettore di oggetti UUID offerti dal server per la registrazione con il mapper dell'endpoint RPC. L'applicazione server costruisce questo vettore.
Annotation
Puntatore al commento di stringa di caratteri applicato a ogni elemento cross-product aggiunto al database della mappa endpoint 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 usata 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.
Osservazioni
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 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 tipo non nil, il tipo di gestore UUID, il server deve anche chiamare RpcObjectSetType per registrare gli oggetti di questo tipo non nil.
Tutte le interfacce del gruppo di interfacce vengono considerate come listen 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.
Specificando una funzione di callback di sicurezza in IfCallback consente all'applicazione server di limitare l'accesso alle relative 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, RpcGetAuthorizationContextForCliento RpcServerInqCallAttributes per recuperare il livello di sicurezza o tentare di rappresentare il client con RpcImpersonateClient. Può anche specificare il flag di 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 usata 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 alla NULL sessione di sicurezza 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 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 farà in modo che il client riceva l'eccezione RPC_S_ACCESS_DENIED.
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à.
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 indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.
Fabbisogno
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) |
Vedere anche
RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN