RPC_CALL_ATTRIBUTES_V1_A-Struktur (rpcasync.h)

Die RPC_CALL_ATTRIBUTES_V1-Struktur stellt Parameter für die RpcServerInqCallAttributes-Funktion bereit. Implementiert in ANSI- und UNICODE-Versionen für Windows XP- und Windows Server 2003-Betriebssysteme.

Syntax

typedef struct tagRPC_CALL_ATTRIBUTES_V1_A {
  unsigned int  Version;
  unsigned long Flags;
  unsigned long ServerPrincipalNameBufferLength;
  unsigned char *ServerPrincipalName;
  unsigned long ClientPrincipalNameBufferLength;
  unsigned char *ClientPrincipalName;
  unsigned long AuthenticationLevel;
  unsigned long AuthenticationService;
  BOOL          NullSession;
} RPC_CALL_ATTRIBUTES_V1_A;

Member

Version

Version der RpcServerInqCallAttributes-Funktion , die von der aufrufenden Anwendung verwendet wird. Siehe Hinweise.

Flags

Bitmaske, die gültige Flags angibt, um RPC_QUERY_SERVER_PRINCIPAL_NAME oder RPC_QUERY_CLIENT_PRINCIPAL_NAME anzufordern. Siehe Hinweise.

ServerPrincipalNameBufferLength

Länge von ServerPrincipalName in Bytes. Wenn nicht ausreichend, ist ServerPrincipalName unverändert, und ServerPrincipalNameBufferLength gibt die erforderliche Pufferlänge an, einschließlich des beendenden NULL-Zeichens , und ERROR_MORE_DATA wird zurückgegeben. Wenn ServerPrincipalNameBufferLength länger als erforderlich ist, wird bei der Rückgabe auf die tatsächlich verwendete Länge in Bytes festgelegt, einschließlich des abschließenden NULL-Zeichens . Siehe Hinweise.

Wenn die Protokollsequenz das Abrufen eines Serverprinzipalnamens nicht unterstützt, wird ServerPrincipalNameBufferLength bei der Rückgabe auf 0 festgelegt, und der Puffer, auf den ServerPrincipalName verweist, ist unverändert. Windows XP: Nur die ncacn_* -Gruppe von Protokollsequenzen unterstützt das Abrufen des Serverprinzipalsnamens.

Wenn das flag RPC_QUERY_SERVER_PRINCIPAL_NAME nicht angegeben wird, wird ServerPrincipalNameBufferLength ignoriert. Wenn ServerPrincipalNameBufferLength ungleich null und ServerPrincipalNamenull ist, wird ERROR_INVALID_PARAMETER zurückgegeben.

ServerPrincipalName

Zeiger auf den Serverprinzipalnamen, wenn er in Flags angefordert und von der Protokollsequenz unterstützt wird. Bei einem anderen Rückgabewert als RPC_S_OK oder ERROR_MORE_DATA ist der Inhalt von ServerPrincipalName nicht definiert und wurde möglicherweise von RPC geändert.

ClientPrincipalNameBufferLength

Die Länge des Puffers, auf den clientPrincipalName in Bytes verweist. Wenn nicht ausreichend, ist ClientPrincipalName unverändert, und ClientPrincipalNameBufferLength gibt die erforderliche Pufferlänge an, einschließlich des beendenden NULL-Zeichens , und ERROR_MORE_DATA wird zurückgegeben. Wenn ClientPrincipalNameBufferLength länger als erforderlich ist, wird bei der Rückgabe auf die tatsächlich verwendete Länge in Bytes festgelegt, einschließlich des abschließenden NULL-Zeichens .

Wenn die Protokollsequenz das Abrufen eines Clientprinzipalnamens nicht unterstützt, wird ClientPrincipalNameBufferLength bei der Rückgabe auf Null festgelegt, und der Puffer, auf den ClientPrincipalName verweist, ist unverändert. Windows XP: Nur die ncalrpc-Protokollsequenz unterstützt das Abrufen des Clientprinzipalnamens.

Wenn das flag RPC_QUERY_CLIENT_PRINCIPAL_NAME nicht angegeben ist, wird ClientPrincipalNameBufferLength ignoriert. Wenn ClientPrincipalNameBufferLength ungleich null und ClientPrincipalNamenull ist, wird ERROR_INVALID_PARAMETER zurückgegeben.

ClientPrincipalName

Zeiger auf den Clientprinzipalnamen, wenn er im Flags-Element angefordert und von der Protokollsequenz unterstützt wird. Bei einem anderen Rückgabewert als RPC_S_OK oder ERROR_MORE_DATA ist der Inhalt von ClientPrincipalName nicht definiert und wurde möglicherweise von RPC geändert.

AuthenticationLevel

Authentifizierungsebene für den Anruf. Informationen zu von RPC unterstützten Authentifizierungsebenen finden Sie unter Konstanten auf Authentifizierungsebene .

AuthenticationService

Authentifizierungsdienst oder Sicherheitsanbieter, der zum Ausführen des Remoteprozeduraufrufs verwendet wird.

NullSession

Gibt an, ob eine NULL-Sitzung verwendet wird. Null gibt an, dass der Aufruf nicht über eine Null-Sitzung kommt. jeder andere Wert gibt eine NULL-Sitzung an.

Hinweise

Die RPC_CALL_ATTRIBUTES-Struktur verwendet ein Versionsverwaltungsschema, damit die RpcServerInqCallAttributes-Funktion neue Funktionen integrieren kann, ohne neue Funktionen mit Suffixbezeichnern einführen zu müssen. Beispielsweise kann eine zweite Version des RPC_CALL_ATTRIBUTES, die mit einer einfachen #define im Header identifiziert wird, neue Member hinzufügen, um neue Funktionen zu ermöglichen, die in zukünftige Versionen der RpcServerInqCallAttributes-Funktion integriert sind, ohne eine entsprechende alternative Funktion freigeben zu müssen.

Das Version-Element gibt die Version der RPC_CALL_ATTRIBUTES-Struktur (derzeit entweder RPC_CALL_ATTRIBUTES_V1 oder RPC_CALL_ATTRIBUTES_V2) an, die von der aufrufenden Anwendung verwendet wird. Diese Identifizierung ermöglicht es der RPC-Laufzeit, Abwärtskompatibilität für Anwendungen bereitzustellen, die nicht die aktuellste Version der Struktur verwenden.

Die Angabe RPC_QUERY_SERVER_PRINCIPAL_NAME im Flags-Member weist RpcServerInqCallAttributes an, den Serverprinzipalnamen in ServerPrincipalName zurückzugeben. Wenn RPC_QUERY_SERVER_PRINCIPAL_NAME nicht angegeben ist, ändert RpcServerInqCallAttributes nicht den in ServerPrincipalName übergebenen Zeiger und speichert nichts an diesem Speicherspeicherort. Die Angabe RPC_QUERY_CLIENT_PRINCIPAL_NAME im Flags-Member weist RpcServerInqCallAttributes an, den Clientprinzipalnamen in ClientPrincipalName zurückzugeben. Wenn RPC_QUERY_CLIENT_PRINCIPAL_NAME nicht angegeben ist, ändert RpcServerInqCallAttributes den in ClientPrincipalName übergebenen Zeiger nicht und speichert nichts an diesem Speicherspeicherort.

Der beste Verarbeitungsmechanismus beim Abrufen von Client- und Serverprinzipalnamen besteht darin, die Länge von ClientPrincipalNameBufferLength und ServerPrincipalNameBufferLength zu speichern. Wenn ERROR_MORE_DATA zurückgegeben wird, vergleichen Sie die gespeicherten Längen mit den in diesen Membern zurückgegebenen Längen. Der Member mit einem gespeicherten Wert, der kleiner oder gleich dem zurückgegebenen Wert ist, wurde erfolgreich zurückgegeben, was angibt, dass der andere Member über einen unzureichenden Puffer verfügte. Lassen Sie im nachfolgenden Aufruf das Flag für den erfolgreich zurückgegebenen Prinzipalnamen aus. Dadurch wird eine Verarbeitung vermieden, die einem anderen Abruf und einer Kopie des erfolgreich zurückgegebenen Prinzipalnamens zugeordnet ist.

Die RPC_CALL_ATTRIBUTES_V1-Struktur wird in der Regel auf zwei Arten aufgerufen:

  • Erster Ansatz: Null wird für das Element ServerPrincipalNameBufferLength oder ClientPrincipalNameBufferLength beim ersten RpcServerInqCallAttributes-Funktionsaufruf angegeben, um die erforderliche Pufferlänge abzurufen oder zu bestimmen, ob das Protokoll die Rückgabe des Prinzipalnamens unterstützt. Beim Abrufen der erforderlichen Pufferlänge wird einem Puffer die erforderliche Länge zugeordnet, und ein zweiter Aufruf erfolgt, um die tatsächliche Länge des Puffers abzurufen.
  • Zweiter Ansatz: Der Aufrufer beginnt mit einem vernünftigen Puffer, der häufig im Stapel zugeordnet ist, und wenn ERROR_MORE_DATA zurückgegeben wird, wird ein Puffer der erforderlichen Länge zugeordnet, und die RpcServerInqCallAttributes-Funktion wird erneut aufgerufen.
Die zweite Methode bietet in den meisten Fällen die beste Leistung, da der Aufrufer keine Speicherbelegung durchführen muss.

Beispiele

RPC_CALL_ATTRIBUTES CallAttributes;  // this maps to RPC_CALL_ATTRIBUTES_V1

memset(&CallAttributes, 0, sizeof(CallAttributes));
CallAttributes.Version = RPC_CALL_ATTRIBUTES_VERSION;    // maps to 1
CallAttributes.Flags = ;//....
Status = RpcServerInqCallAttributes(0, &CallAttributes);

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile rpcasync.h (rpc.h einschließen)

Weitere Informationen

Konstanten auf Authentifizierungsebene

RpcServerInqCallAttributes