RPC_INTERFACE_TEMPLATEA-Struktur (rpcdce.h)
Die RPC_INTERFACE_TEMPLATE-Struktur definiert eine RPC-Schnittstellengruppenserverschnittstelle.
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;
Version
Dieses Feld ist reserviert und muss auf 0 festgelegt werden.
IfSpec
MIDL-generierte Struktur, die die zu registrierende Schnittstelle definiert.
MgrTypeUuid
Zeiger auf eine UUID , die mgrEpv zugeordnet werden soll. Null oder eine Nil-UUID registriert IfSpec mit einer nil-UUID.
MgrEpv
Zeiger auf eine RPC_MGR_EPV-Struktur , die den Einstiegspunktvektor (EPV) der Managerroutinen enthält. Bei NULL wird die von MIDL generierte Standard-EPV verwendet.
Flags
Flaggen. Eine Liste der Flagwerte finden Sie unter Schnittstellenregistrierungsflags. Schnittstellengruppenschnittstellen werden immer als automatisches Abhören behandelt.
MaxCalls
Maximale Anzahl gleichzeitiger Remoteprozeduraufrufe, die der Server für diese Schnittstelle akzeptieren kann. Die RPC-Laufzeitbibliothek bemüht sich nach besten Kräften, um sicherzustellen, dass der Server nicht mehr gleichzeitige Anrufanforderungen zulässt als die in MaxCalls angegebene Anzahl von Anrufen. Die tatsächliche Zahl kann jedoch größer als MaxCalls sein und kann für jede Protokollsequenz variieren.
Aufrufe an anderen Schnittstellen werden durch den Wert des prozessweiten MaxCalls-Parameters gesteuert, der in RpcServerListen angegeben ist.
Wenn die Anzahl gleichzeitiger Aufrufe kein Problem darstellt, kann eine etwas bessere serverseitige Leistung erzielt werden, indem der Standardwert mithilfe von RPC_C_LISTEN_MAX_CALLS_DEFAULT angegeben wird. Dadurch wird die RPC-Laufzeitumgebung davon befreit, eine unnötige Einschränkung zu erzwingen.
MaxRpcSize
Maximale Größe eingehender Datenblöcke in Bytes. MaxRpcSize kann verwendet werden, um böswillige Denial-of-Service-Angriffe zu verhindern. Wenn der Datenblock eines Remoteprozeduraufrufs größer als MaxRpcSize ist, lehnt die RPC-Laufzeitbibliothek den Aufruf ab und sendet einen RPC_S_ACCESS_DENIED Fehler an den Client. Wenn Sie in MaxRpcSize einen Wert von (ohne Vorzeichen) –1 angeben, wird der Grenzwert für die Größe eingehender Datenblöcke aufgehoben. Dieser Parameter hat keine Auswirkungen auf Aufrufe, die über das ncalrpc-Protokoll ausgeführt werden.
IfCallback
Ein Zeiger auf eine RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN Sicherheitsrückruffunktion oder NULL für keinen Rückruf. Jede registrierte Schnittstelle kann über eine andere Rückruffunktion verfügen.
UuidVector
Zeiger auf einen Vektor von Objekt-UUIDs , die vom Server für die Registrierung bei der RPC-Endpunktzuordnung angeboten werden. Die Serveranwendung erstellt diesen Vektor. NULL gibt an, dass keine Objekt-UUIDs registriert werden müssen.
Annotation
Zeiger auf den Zeichenfolgenkommentar, der auf jedes produktübergreifende Element angewendet wird, das der lokalen Endpunktzuordnungsdatenbank hinzugefügt wird. Die Zeichenfolge kann bis zu 64 Zeichen lang sein, einschließlich des NULL-Endzeichens. Geben Sie einen NULL-Wert oder eine null-beendete Zeichenfolge ("\0") an, wenn keine Anmerkungszeichenfolge vorhanden ist.
Die Anmerkungszeichenfolge wird nur von Anwendungen als Informationszwecken verwendet. RPC verwendet diese Zeichenfolge nicht, um zu bestimmen, welcher Server instance ein Client mit oder zum Auflisten von Elementen in der Endpunktzuordnungsdatenbank kommuniziert.
SecurityDescriptor
Optionaler Sicherheitsdeskriptor, der beschreibt, welche Clients das Recht haben, auf die Schnittstelle zuzugreifen.
Um eine Schnittstelle zu registrieren, stellt der Server die folgenden Informationen bereit:
- Schnittstellenspezifikation Die Schnittstellenspezifikation ist eine Datenstruktur, die vom MIDL-Compiler generiert wird.
- Managertyp UUID und Manager-EPV Der Managertyp UUID und der Manager EPV bestimmen, welche Managerroutine ausgeführt wird, wenn ein Server eine Remoteprozeduraufrufanforderung von einem Client empfängt. Für jede Implementierung einer Von einem Server angebotenen Schnittstelle muss ein separater Manager-EPV registriert werden. Beachten Sie, dass der Server beim Angeben einer UUID vom Managertyp "non-nil" auch RpcObjectSetType aufrufen muss, um Objekte dieses Nicht-Nil-Typs zu registrieren.
Alle Schnittstellen für Schnittstellengruppen werden als automatisches Abhören behandelt. Die Runtime beginnt mit dem Lauschen auf Aufrufe, sobald die Schnittstellengruppe aktiviert ist. Aufrufe von RpcServerListen und RpcMgmtStopServerListening wirken sich weder auf die Schnittstelle aus, noch ein Aufruf von RpcServerUnregisterIf mit ifSpec auf NULL festgelegt.
Wenn Sie eine Sicherheitsrückruffunktion in IfCallback angeben, kann die Serveranwendung den Zugriff auf ihre Schnittstellen auf einer einzelnen Clientbasis einschränken. Das heißt, die Sicherheit ist standardmäßig optional. die Serverlaufzeit sendet ungesicherte Aufrufe, auch wenn der Server RpcServerRegisterAuthInfo aufgerufen hat. Wenn der Server nur authentifizierte Clients akzeptieren möchte, muss eine Schnittstellenrückruffunktion RpcBindingInqAuthClient, RpcGetAuthorizationContextForClient oder RpcServerInqCallAttributes aufrufen, um die Sicherheitsstufe abzurufen, oder versuchen, die Identität des Clients mit RpcImpersonateClient zu übernehmen. Es kann auch das RPC_IF_ALLOW_SECURE_ONLY-Flag in Flags angeben, um nicht authentifizierte Aufrufe abzulehnen.
Wenn eine Serveranwendung eine Sicherheitsrückruffunktion für ihre Schnittstellen in IfCallback angibt, lehnt die RPC-Laufzeit Automatisch Aufrufe ohne Authentifizierungsinformationen für diese Schnittstelle ab. Darüber hinaus zeichnet die Laufzeit die Schnittstellen auf, die jeder Client verwendet hat. Wenn ein Client einen RPC zu einer Schnittstelle macht, die er während der aktuellen Kommunikationssitzung nicht verwendet hat, ruft die RPC-Laufzeitbibliothek die Sicherheitsrückruffunktion der Schnittstelle auf. Wenn Sie RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH in Flags angeben, wird die automatische Ablehnung nicht authentifizierter Clients verhindert. Beachten Sie, dass Aufrufe der NULL-Sicherheitssitzung Authentifizierungsinformationen enthalten können, auch wenn sie von anonymen Clients stammen. Daher reicht das Vorhandensein eines Rückrufs allein nicht aus, um anonyme Clients daran zu hindern, eine Verbindung herzustellen. entweder die Sicherheitsrückruffunktion muss dies überprüfen, oder das RPC_IF_ALLOW_SECURE_ONLY-Flag muss verwendet werden. RPC_IF_ALLOW_SECURE_ONLY lehnt NULL-Sitzungsaufrufe nur unter Windows XP und höheren Versionen von Windows ab.
Die Signatur für die Rückruffunktion finden Sie unter RPC_IF_CALLBACK_FN.
Die Rückruffunktion in IfCallback sollte RPC_S_OK zurückgeben, wenn der Client Methoden in dieser Schnittstelle aufrufen darf. Jeder andere Rückgabecode bewirkt, dass der Client die Ausnahme RPC_S_ACCESS_DENIED empfängt.
In einigen Fällen kann die RPC-Laufzeit die Sicherheitsrückruffunktion mehrmals pro Client und pro Schnittstelle aufrufen. Die Rückruffunktion muss diese Möglichkeit verarbeiten können.
Hinweis
Der header rpcdce.h definiert RPC_INTERFACE_TEMPLATE als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit nicht codierungsneutralem Code kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 8 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2012 [nur Desktop-Apps] |
Kopfzeile | rpcdce.h (include Rpc.h) |
RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN