Freigeben über


RPC_INTERFACE_TEMPLATEW Struktur (rpcdce.h)

Die RPC_INTERFACE_TEMPLATE Struktur definiert eine RPC-Schnittstellengruppenserverschnittstelle.

Syntax

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;

Angehörige

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 ein nil UUID registriert IfSpec mit einem nil UUID.

MgrEpv

Zeiger auf eine RPC_MGR_EPV Struktur, die den Einstiegspunktvektor (EPV) der Managerroutinen enthält. Wenn NULL-wird der von MIDL generierte Standard-EPV verwendet.

Flags

Flaggen. Eine Liste der Flagwerte finden Sie unter Interface Registration Flags. Schnittstellen für Schnittstellengruppen werden immer als automatischen Listenbehandelt.

MaxCalls

Die maximale Anzahl gleichzeitiger Remoteprozeduraufrufanforderungen, die der Server auf dieser Schnittstelle akzeptieren kann. Die RPC-Laufzeitbibliothek bemüht sich am besten, sicherzustellen, dass der Server nicht mehr gleichzeitige Anrufanforderungen zulässt, als die Anzahl der in MaxCallsangegebenen Anrufe. Die tatsächliche Zahl kann jedoch größer als MaxCalls- sein und kann für jede Protokollsequenz variieren.

Aufrufe anderer Schnittstellen unterliegen dem Wert des prozessweiten MaxCalls Parameter, der in RpcServerListen-angegeben ist.

Wenn die Anzahl gleichzeitiger Anrufe kein Problem darstellt, kann die serverseitige Leistung leicht verbessert werden, indem der Standardwert mithilfe von RPC_C_LISTEN_MAX_CALLS_DEFAULTangegeben wird. Dadurch wird die RPC-Laufzeitumgebung von der Erzwingung einer unnötigen Einschränkung befreit.

MaxRpcSize

Maximale Größe in Bytes von eingehenden Datenblöcken. MaxRpcSize kann verwendet werden, um böswillige Denial-of-Service-Angriffe zu verhindern. Wenn der Datenblock eines Remoteprozeduraufrufs größer als MaxRpcSizeist, lehnt die RPC-Laufzeitbibliothek den Aufruf ab und sendet einen RPC_S_ACCESS_DENIED Fehler an den Client. Das Angeben eines Werts von (nicht signierter Int) –1 in MaxRpcSize entfernt den Grenzwert für die Größe eingehender Datenblöcke. Dieser Parameter hat keine Auswirkungen auf Aufrufe über das ncalrpc Protokoll.

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 Objektvektor UUIDs vom Server, der beim RPC-Endpunktzuordnung registriert werden soll. Die Serveranwendung erstellt diesen Vektor. NULL- gibt an, dass es kein Objekt UUIDs zum Registrieren gibt.

Annotation

Zeiger auf den Zeichenzeichenfolgenkommentar, der auf jedes produktübergreifende Element angewendet wird, das der lokalen Endpunktzuordnungsdatenbank hinzugefügt wurde. Die Zeichenfolge kann bis zu 64 Zeichen lang sein, einschließlich des Null-Endzeichens. Geben Sie einen NULL-Wert oder eine mit Null beendete Zeichenfolge ("\0") an, wenn keine Anmerkungszeichenfolge vorhanden ist.

Die Anmerkungszeichenfolge wird nur von Anwendungen für Informationen verwendet. RPC verwendet diese Zeichenfolge nicht, um zu bestimmen, mit welcher Serverinstanz ein Client kommuniziert, oder um Elemente in der Endpunktzuordnungsdatenbank aufzulisten.

SecurityDescriptor

Optionaler Sicherheitsdeskriptor, der beschreibt, welche Clients das Recht haben, auf die Schnittstelle zuzugreifen.

Bemerkungen

Um eine Schnittstelle zu registrieren, stellt der Server die folgenden Informationen bereit:

  • Schnittstellenspezifikation Die Schnittstellenspezifikation ist eine Datenstruktur, die der MIDL-Compiler generiert.
  • 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 Schnittstelle, die von einem Server angeboten wird, muss sie einen separaten Manager EPV registrieren. Beachten Sie, dass der Server beim Angeben eines Nicht-Nil-Managertyps UUID-auch RpcObjectSetType- aufrufen muss, um Objekte dieses Nicht-Nil-Typs zu registrieren.

Alle Schnittstellen der Schnittstellengruppe werden als automatischen Listenbehandelt. Die Laufzeit beginnt mit der Überwachung von Anrufen, sobald die Schnittstellengruppe aktiviert ist. Aufrufe an RpcServerListen und RpcMgmtStopServerListening wirken sich weder auf die Schnittstelle aus, noch wirkt sich ein Aufruf von RpcServerUnregisterIfen mit IfSpec auf NULLfestgelegt.

Wenn Sie eine Sicherheitsrückruffunktion in IfCallback- angeben, kann die Serveranwendung den Zugriff auf seine Schnittstellen auf einzelne Clientbasis einschränken. Dies ist standardmäßig optional; Die Serverausführung sendet ungesicherte Anrufe auch dann, wenn der Server RpcServerRegisterAuthInfoaufgerufen hat. Wenn der Server nur authentifizierte Clients akzeptieren möchte, muss eine Schnittstellenrückruffunktion RpcBindingInqAuthClient, RpcGetAuthorizationContextForClientoder RpcServerInqCallAttributes aufrufen, um die Sicherheitsstufe abzurufen, oder versuchen, den Client mit RpcImpersonateClientidentitätswechseln. Sie 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 an diese Schnittstelle ab. Darüber hinaus zeichnet die Laufzeit die Schnittstellen auf, die jeder Client verwendet hat. Wenn ein Client ein RPC an einer Schnittstelle sendet, die er während der aktuellen Kommunikationssitzung nicht verwendet hat, ruft die RPC-Laufzeitbibliothek die Sicherheitsrückruffunktion der Schnittstelle auf. Das Angeben von RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH in Flags verhindert die automatische Ablehnung nicht authentifizierter Clients. 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 zu verhindern, dass anonyme Clients eine Verbindung herstellen; 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 Nullsitzungsaufrufe 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_DENIEDempfängt.

In einigen Fällen kann die RPC-Laufzeit die Sicherheitsrückruffunktion mehr als einmal pro Client pro Schnittstelle aufrufen. Die Rückruffunktion muss diese Möglichkeit verarbeiten können.

Anmerkung

Der rpcdce.h-Header 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 Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 8 [nur Desktop-Apps]
mindestens unterstützte Server- Windows Server 2012 [nur Desktop-Apps]
Header- rpcdce.h (include Rpc.h)

Siehe auch

RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN

rpcServerInqBindings-

RpcServerInterfaceGroupActivate

RpcServerInterfaceGroupClose

RpcServerInterfaceGroupCreate

RpcServerInterfaceGroupDeactivate