Freigeben über


InitializeSecurityContext (General)-Funktion

Die Funktion InitializeSecurityContext (General) initiiert den clientseitigen, ausgehenden Sicherheitskontext aus einem Anmeldeinformations-Handle. Die Funktion wird verwendet, um einen Sicherheitskontext zwischen der Clientanwendung und einem Remote-Peer zu erstellen. InitializeSecurityContext (General) gibt ein Token zurück, das den Client an den Remote-Peer übergeben muss, den der Peer wiederum über den AcceptSecurityContext (General)-Aufruf an die lokale Sicherheitsimplementierung sendet. Das generierte Token sollte von allen Aufrufern als undurchsichtig betrachtet werden.

In der Regel wird die Funktion InitializeSecurityContext (General) in einer Schleife aufgerufen, bis ein ausreichender Sicherheitskontext eingerichtet wird.

Informationen zur Verwendung dieser Funktion mit einem bestimmten SSP (Security Support Provider) finden Sie in den folgenden Themen.

Thema Beschreibung
InitializeSecurityContext (CredSSP) Initiiert den clientseitigen, ausgehenden Sicherheitskontext aus einem Anmeldeinformations-Handle mithilfe des Sicherheitspakets für den Sicherheitsdienstanbieter für Anmeldeinformationen (Credential Security Support Provider, CredSSP).
InitializeSecurityContext (Digest) Initiiert den clientseitigen, ausgehenden Sicherheitskontext aus einem Anmeldeinformations-Handle mithilfe des Digest-Sicherheitspakets.
InitializeSecurityContext (Kerberos) Initiiert den clientseitigen, ausgehenden Sicherheitskontext aus einem Anmeldeinformations-Handle mithilfe des Kerberos-Sicherheitspakets.
InitializeSecurityContext (Negotiate) Initiiert den clientseitigen, ausgehenden Sicherheitskontext aus einem Anmeldeinformations-Handle mithilfe des Negotiate-Sicherheitspakets.
InitializeSecurityContext (NTLM) Initiiert den clientseitigen, ausgehenden Sicherheitskontext aus einem Anmeldeinformations-Handle mithilfe des NTLM-Sicherheitspakets.
InitializeSecurityContext (Schannel) Initiiert den clientseitigen, ausgehenden Sicherheitskontext aus einem Anmeldeinformations-Handle mithilfe des Schannel-Sicherheitspakets.

Syntax

SECURITY_STATUS SEC_Entry InitializeSecurityContext(
  _In_opt_    PCredHandle    phCredential,
  _In_opt_    PCtxtHandle    phContext,
  _In_opt_    SEC_CHAR       *pszTargetName,
  _In_        ULONG          fContextReq,
  _In_        ULONG          Reserved1,
  _In_        ULONG          TargetDataRep,
  _In_opt_    PSecBufferDesc pInput,
  _In_        ULONG          Reserved2,
  _Inout_opt_ PCtxtHandle    phNewContext,
  _Inout_opt_ PSecBufferDesc pOutput,
  _Out_       PULONG         pfContextAttr,
  _Out_opt_   PTimeStamp     ptsExpiry
);

Parameter

phCredential[in, optional]

Ein Handle für die Anmeldeinformationen, die von AcquireCredentialsHandle (General)zurückgegeben werden. Dieses Handle wird verwendet, um den Sicherheitskontext zu erstellen. Für die Funktion InitializeSecurityContext (General) sind mindestens AUSGEHENDE Anmeldeinformationen erforderlich.

phContext[in, optional]

Ein Zeiger auf eine CtxtHandle-Struktur. Beim ersten Aufruf von InitializeSecurityContext (General) lautet dieser Zeiger NULL. Bei dem zweiten Aufruf ist dieser Parameter ein Zeiger auf das Handle auf den teilweise gebildeten Kontext, der vom ersten Aufruf im phNewContext-Parameter zurückgegeben wird.

Dieser Parameter ist optional mit dem Microsoft Digest-SSP und kann auf NULL festgelegt werden.

Wenn Sie den Schannel-SSP verwenden, geben Sie NULL beim ersten Aufruf von InitializeSecurityContext (General) an. Geben Sie bei zukünftigen Aufrufen das Token an, das im Parameter phNewContext empfangen wurde, nachdem der erste Aufruf dieser Funktion aufgerufen wurde.

Warnung

Verwenden Sie nicht dasselbe Kontexthandle in gleichzeitigen Aufrufen von InitializeSecurityContext (General). Die API-Implementierung in den Sicherheitsdienstanbietern ist nicht threadsicher.

pTargetName[in, optional]

Ein Zeiger auf eine mit Null beendete Zeichenfolge, die das Ziel des Kontexts angibt. Die Zeichenfolgeninhalte sind sicherheitspaketspezifisch, wie in der folgenden Tabelle beschrieben. Diese Liste ist nicht vollständig. Zusätzliche System-SSPs und SSPs von Drittanbietern können einem System hinzugefügt werden.

SSP wird verwendet Bedeutung
Digest Eine mit Null beendete Zeichenfolge, die den URI der angeforderten Ressource eindeutig identifiziert. Die Zeichenfolge muss aus Zeichen bestehen, die in einem URI zulässig sind und durch den US-ASCII-Codesatz dargestellt werden können. Die Prozentcodierung kann verwendet werden, um Zeichen außerhalb des US ASCII-Codesatzes darzustellen.
Kerberos oder Negotiate Dienstprinzipalname (Service Principal Name, SPN) oder der Sicherheitskontext des Zielservers.
NTLM Dienstprinzipalname (Service Principal Name, SPN) oder der Sicherheitskontext des Zielservers.
Schannel/SSL Eine mit Null beendete Zeichenfolge, die den Zielserver eindeutig identifiziert. Schannel verwendet diesen Wert, um das Serverzertifikat zu überprüfen. Schannel verwendet diesen Wert auch, um die Sitzung im Sitzungscache zu suchen, wenn eine Verbindung wiederhergestellt wird. Die zwischengespeicherte Sitzung wird nur verwendet, wenn alle folgenden Bedingungen erfüllt sind:
-Der Zielname ist identisch.
-Der Cacheeintrag ist nicht abgelaufen.
-Der Anwendungsprozess, der die Funktion aufruft, ist identisch.
-Die Anmeldesitzung ist identisch.
-Das Anmeldeinformations-Handle ist identisch.

fContextReq[in]

Bitkennzeichnungen, die Anforderungen für den Kontext angeben. Nicht alle Pakete können alle Anforderungen unterstützen. Kennzeichen, die für diesen Parameter verwendet werden, wird ISC_REQ_ vorangestellt, z. B. ISC_REQ_DELEGATE. Dieser Parameter kann eine oder mehrere der folgenden Attributkennzeichnungen aufweisen.

Wert Bedeutung
ISC_REQ_ALLOCATE_MEMORY Das Sicherheitspaket weist Ausgabepuffer für Sie zu. Wenn Sie die Verwendung der Ausgabepuffer abgeschlossen haben, geben Sie sie frei, indem Sie die FreeContextBuffer-Funktion aufrufen.
ISC_REQ_CONFIDENTIALITY Verschlüsseln sie Nachrichten mithilfe der EncryptMessage-Funktion.
ISC_REQ_CONNECTION Der Sicherheitskontext behandelt keine Formatierungsmeldungen. Dieser Wert ist die Standardeinstellung für die eingeschränkten Kerberos-, Negotiate- und NTLM-Delegierungen.
ISC_REQ_DELEGATE Der Server kann den Kontext verwenden, um sich bei anderen Servern als Client zu authentifizieren. Die ISC_REQ_MUTUAL_AUTH-Kennzeichnung muss festgelegt werden, damit dieses Kennzeichen funktioniert. Gültig für Kerberos. Ignorieren Sie dieses Kennzeichen für die eingeschränkte Delegierung.
ISC_REQ_EXTENDED_ERROR Wenn Fehler auftreten, wird die Remotepartei benachrichtigt.
ISC_REQ_HTTP Verwenden Sie Digest für HTTP. Lassen Sie diese Kennzeichnung weg, um Digest als SASL-Mechanismus zu verwenden.
ISC_REQ_INTEGRITY Signieren Sie Nachrichten, und überprüfen Sie Signaturen mithilfe der Funktionen EncryptMessage und MakeSignature.
ISC_REQ_MANUAL_CRED_VALIDATION Schannel darf den Server nicht automatisch authentifizieren.
ISC_REQ_MUTUAL_AUTH Die Richtlinie für die gegenseitige Authentifizierung des Dienstes wird erfüllt.
ACHTUNG: Das bedeutet nicht unbedingt, dass die gegenseitige Authentifizierung ausgeführt wird, nur dass die Authentifizierungsrichtlinie des Diensts erfüllt ist. Rufen Sie die QueryContextAttributes (General)-Funktion auf, um sicherzustellen, dass die gegenseitige Authentifizierung ausgeführt wird.
ISC_REQ_NO_INTEGRITY Wenn diese Kennzeichnung festgelegt ist, wird die ISC_REQ_INTEGRITY-Kennzeichnung ignoriert.
Dieser Wert wird nur von den eingeschränkten Delegierungen Negotiate und Kerberos unterstützt.
ISC_REQ_REPLAY_DETECT Erkennen sie wiedergegebene Nachrichten, die mithilfe der Funktionen EncryptMessage oder MakeSignature codiert wurden.
ISC_REQ_SEQUENCE_DETECT Erkennen von Nachrichten, die außerhalb der Sequenz empfangen wurden.
ISC_REQ_STREAM Unterstützen einer streamorientierten Verbindung.
ISC_REQ_USE_SESSION_KEY Ein neuer Sitzungsschlüssel muss ausgehandelt werden.
Dieser Wert wird nur von der eingeschränkten Kerberos-Delegierung unterstützt.
ISC_REQ_USE_SUPPLIED_CREDS Schannel darf nicht versuchen, Anmeldeinformationen für den Client automatisch anzugeben.

Die angeforderten Attribute werden möglicherweise vom Client nicht unterstützt. Weitere Informationen finden Sie im Parameter pfContextAttr .

Weitere Beschreibungen der verschiedenen Attribute finden Sie unter Kontextanforderungen.

Reserved1[in]

Dieser Parameter ist reserviert und muss auf Null festgelegt werden.

TargetDataRep[in]

Die Datendarstellung, z. B. Byte-Sortierung, auf dem Ziel. Dieser Parameter kann entweder SECURITY_NATIVE_DREP oder SECURITY_NETWORK_DREP sein.

Dieser Parameter wird nicht mit Digest oder Schannel verwendet. Legen Sie sie auf Null fest.

pInput[in, optional]

Ein Zeiger auf eine SecBufferDesc-Struktur, die Zeiger auf die Puffer enthält, die als Eingabe für das Paket bereitgestellt werden. Sofern der Clientkontext nicht vom Server initiiert wurde, muss der Wert dieses Parameters beim ersten Aufruf der Funktion NULL sein. Bei nachfolgenden Aufrufen der Funktion oder beim Initiieren des Clientkontexts vom Server ist der Wert dieses Parameters ein Zeiger auf einen Puffer, dem genügend Arbeitsspeicher zugeordnet ist, um das vom Remotecomputer zurückgegebene Token zu speichern.

Reserviert 2[in]

Dieser Parameter ist reserviert und muss auf Null festgelegt werden.

phNewContext[in, out, optional]

Ein Zeiger auf eine CtxtHandle-Struktur. Beim ersten Aufruf von InitializeSecurityContext (General) empfängt dieser Zeiger das neue Kontexthandle. Im zweiten Aufruf kann phNewContext mit dem im phContext-Parameter angegebenen Handle identisch sein. phNewContext sollte niemals NULL sein.

pOutput[in, out, optional]

Ein Zeiger auf eine SecBufferDesc-Struktur, die Zeiger auf die SecBuffer-Struktur enthält, welche die Ausgabedaten empfängt. Wenn ein Puffer als SEC_READWRITE in die Eingabe eingegeben wurde, wird er in der Ausgabe angezeigt. Falls dazu aufgefordert, weist das System einen Puffer für das Sicherheitstoken zu (über ISC_REQ_ALLOCATE_MEMORY) und füllt die Adresse im Pufferdeskriptor für das Sicherheitstoken aus.

Bei Verwendung des Microsoft Digest-SSP empfängt dieser Parameter die Abfrageantwort, die an den Server gesendet werden muss.

Bei Verwendung des Schannel-SSP, wenn die ISC_REQ_ALLOCATE_MEMORY-Kennzeichnung angegeben ist, weist der Schannel-SSP dem Puffer Speicher zu und legt die entsprechenden Informationen im SecBufferDesc bereit. Darüber hinaus muss der Aufrufer einen Puffer vom Typ SECBUFFER_ALERT übergeben. Wenn bei der Ausgabe eine Warnung generiert wird, enthält dieser Puffer Informationen zu dieser Warnung, und die Funktion schlägt fehl.

pfContextAttr[out]

Ein Zeiger auf eine Variable, um eine Reihe von Bitkennzeichnungen zu empfangen, welche die Attribute des etablierten Kontexts angeben. Eine Beschreibung der verschiedenen Attribute finden Sie unter Kontextanforderungen.

Für diesen Parameter verwendeten Kennzeichnungen wird ISC_RET vorangestellt, z. B. ISC_RET_DELEGATE. Eine Liste der gültigen Werte finden Sie im fContextReq-Parameter.

Überprüfen Sie erst auf sicherheitsbezogene Attribute, wenn der endgültige Funktionsaufruf erfolgreich zurückgegeben wurde. Attributkennzeichnungen, die sich nicht auf die Sicherheit beziehen, z. B. die ASC_RET_ALLOCATED_MEMORY-Kennzeichnung, können vor der endgültigen Rückgabe überprüft werden.

Hinweis

Bestimmte Kontextattribute können sich während der Aushandlung mit einem Remote-Peer ändern.

ptsExpiry[out, optional]

Ein Zeiger auf eine TimeStamp-Struktur, welche die Ablaufzeit des Kontexts empfängt. Es wird empfohlen, dass das Sicherheitspaket diesen Wert immer in der lokalen Zeit zurückgibt. Dieser Parameter ist optional und für kurzlebige Clients sollte NULL übergeben werden.

Es gibt keine Ablaufzeit für Microsoft Digest SSP-Sicherheitskontexte oder Anmeldeinformationen.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion einen der folgenden Erfolgscodes zurück.

Rückgabecode Beschreibung
SEC_I_COMPLETE_AND_CONTINUE Der Client muss CompleteAuthToken aufrufen und dann die Ausgabe an den Server übergeben. Der Client wartet dann auf ein zurückgegebenes Token und übergibt es in einem anderen Aufruf an InitializeSecurityContext (General).
SEC_I_COMPLETE_NEEDED Der Client muss die Erstellung der Nachricht abschließen und dann die CompleteAuthToken-Funktion aufrufen.
SEC_I_CONTINUE_NEEDED Der Client muss das Ausgabetoken an den Server senden und auf ein Rückgabetoken warten. Das zurückgegebene Token wird dann in einem anderen Aufruf an InitializeSecurityContext (General) übergeben. Das Ausgabetoken kann leer sein.
SEC_I_INCOMPLETE_CREDENTIALS Verwendung mit Schannel. Der Server hat die Clientauthentifizierung angefordert, und die bereitgestellten Anmeldeinformationen enthalten entweder kein Zertifikat oder das Zertifikat wurde nicht von einer Zertifizierungsstelle ausgestellt, die vom Server als vertrauenswürdig eingestuft wurde. Weitere Informationen finden Sie in den Hinweisen.
SEC_E_INCOMPLETE_MESSAGE Verwendung mit Schannel. Daten für die gesamte Nachricht wurden nicht aus der Leitung gelesen.
Wenn dieser Wert zurückgegeben wird, enthält der pInput-Puffer eine SecBuffer-Struktur mit einem BufferType-Element von SECBUFFER_MISSING. Das cbBuffer-Element von SecBuffer enthält einen Wert, der die Anzahl zusätzlicher Bytes angibt, welche die Funktion aus dem Client lesen muss, bevor diese Funktion erfolgreich ausgeführt wird. Diese Anzahl ist zwar nicht immer genau, kann aber dadurch die Leistung verbessern, dass mehrere Aufrufe dieser Funktion vermieden werden.
SEC_E_OK Der Sicherheitskontext wurde erfolgreich initialisiert. Es ist kein weiterer Aufruf von InitializeSecurityContext (General) erforderlich. Wenn die Funktion ein Ausgabetoken zurückgibt, d. h., wenn die SECBUFFER_TOKEN in pOutput eine Länge ungleich Null aufweist, muss dieses Token an den Server gesendet werden.

Wenn die Funktion fehlschlägt, gibt die Funktion einen der folgenden Fehlercodes zurück.

Rückgabecode Beschreibung
SEC_E_INSUFFICIENT_MEMORY Es steht nicht genügend Arbeitsspeicher zur Verfügung, um die angeforderte Aktion abzuschließen.
SEC_E_INTERNAL_ERROR Ein Fehler ist aufgetreten, der keinem SSPI-Fehlercode zugeordnet wurde.
SEC_E_INVALID_HANDLE Die dieser Funktion übergebene URL ist ungültig.
SEC_E_INVALID_TOKEN Der Fehler ist auf ein falsch formatiertes Eingabetoken zurückzuführen, z. B. ein während der Übertragung beschädigtes Token, ein Token mit falscher Größe oder ein Token, das an das falsche Sicherheitspaket übergeben wurde. Das Übergeben eines Tokens an das falsche Paket kann passieren, wenn der Client und der Server nicht das richtige Sicherheitspaket ausgehandelt haben.
SEC_E_LOGON_DENIED Fehler bei der Anmeldung.
SEC_E_NO_AUTHENTICATING_AUTHORITY Es konnte keine Autorität für die Authentifizierung kontaktiert werden. Der Domänenname der Authentifizierungspartei könnte falsch sein, die Domäne könnte nicht erreichbar sein, oder es ist möglicherweise ein Vertrauensstellungsfehler aufgetreten.
SEC_E_NO_CREDENTIALS Im Sicherheitspaket sind keine Anmeldeinformationen verfügbar.
SEC_E_TARGET_UNKNOWN Das Ziel wurde nicht erkannt.
SEC_E_UNSUPPORTED_FUNCTION Im fContextReq-Parameter wurde ein ungültiges Kontextattribute-Kennzeichen (ISC_REQ_DELEGATE oder ISC_REQ_PROMPT_FOR_CREDS) angegeben.
SEC_E_WRONG_PRINCIPAL Der Prinzipal, der die Authentifizierungsanforderung empfangen hat, ist nicht mit dem Prinzipal identisch, das an den pszTargetName-Parameter übergeben wurde. Dies weist auf einen Fehler bei der gegenseitigen Authentifizierung hin.

Hinweise

Der Aufrufer ist dafür verantwortlich, zu bestimmen, ob die endgültigen Kontextattribute ausreichen. Wenn beispielsweise die Vertraulichkeit angefordert wurde, aber nicht eingerichtet werden konnte, können einige Anwendungen die Verbindung sofort herunterfahren.

Wenn Attribute des Sicherheitskontexts nicht ausreichen, muss der Client den teilweise erstellten Kontext durch Aufrufen der DeleteSecurityContext-Funktion freigeben.

Die Funktion InitializeSecurityContext (General) wird von einem Client verwendet, um einen ausgehenden Kontext zu initialisieren.

Für einen zweistufigen Sicherheitskontext lautet die Aufrufsequenz wie folgt:

  1. Der Client ruft die Funktion mit phContext-Satz auf, legt sie auf NULL fest und füllt den Pufferdeskriptor mit der Eingabemeldung aus.
  2. Das Sicherheitspaket untersucht die Parameter und erstellt ein undurchsichtiges Token und platziert es im TOKEN-Element im Pufferarray. Wenn der fContextReq-Parameter das ISC_REQ_ALLOCATE_MEMORY-Kennzeichen enthält, weist das Sicherheitspaket den Speicher zu und gibt den Zeiger im TOKEN-Element zurück.
  3. Der Client sendet das im pOutput-Puffer zurückgegebene Token an den Zielserver. Der Server übergibt das Token dann als Eingabeargument in einem Aufruf der AcceptSecurityContext (General)-Funktion.
  4. AcceptSecurityContext (General) kann ein Token zurückgeben, das der Server für einen zweiten Aufruf von InitializeSecurityContext (General) an den Client sendet, wenn der erste Aufruf SEC_I_CONTINUE_NEEDED zurückgegeben hat.

Bei mehrstufigen Sicherheitskontexten, z. B. der gegenseitigen Authentifizierung, lautet die Aufrufsequenz wie folgt:

  1. Der Client ruft die Funktion wie zuvor beschrieben auf, aber das Paket gibt den SEC_I_CONTINUE_NEEDED Erfolgscode zurück.
  2. Der Client sendet das Ausgabetoken an den Server und wartet auf die Antwort des Servers.
  3. Nach Erhalt der Antwort des Servers ruft der Client InitializeSecurityContext (General) erneut auf, wobei phContext auf das Handle festgelegt wurde, das vom letzten Aufruf zurückgegeben wurde. Das vom Server empfangene Token wird im pInput-Parameter angegeben.
  4. Verwenden Sie nicht den phContext-Wert in gleichzeitigen Aufrufen von InitializeSecurityContext (General). Die Implementierung in den Sicherheitsanbietern ist nicht threadsicher.

Wenn der Server erfolgreich reagiert hat, gibt das Sicherheitspaket SEC_E_OK zurück, und es wird eine sichere Sitzung eingerichtet.

Wenn die Funktion eine der Fehlerantworten zurückgibt, wird die Antwort des Servers nicht akzeptiert, und die Sitzung wird nicht eingerichtet.

Wenn die Funktion SEC_I_CONTINUE_NEEDED, SEC_I_COMPLETE_NEEDED oder SEC_I_COMPLETE_AND_CONTINUE zurückgibt, werden die Schritte 2 und 3 wiederholt.

Zum Initialisieren eines Sicherheitskontexts sind je nach zugrunde liegendem Authentifizierungsmechanismus und den im fContextReq-Parameter angegebenen Optionen möglicherweise mehrere Aufrufe dieser Funktion erforderlich.

Die Parameter fContextReq und pfContextAttributes sind Bitmasken, die verschiedene Kontextattribute darstellen. Eine Beschreibung der verschiedenen Attribute finden Sie unter Kontextanforderungen. Der Parameter pfContextAttributes ist für jede erfolgreiche Rückgabe gültig, aber nur bei der endgültigen erfolgreichen Rückgabe sollten Sie die Flags untersuchen, die sicherheitsrelevante Aspekte des Kontexts betreffen. Zwischenrückzeichen können z. B. die ISC_RET_ALLOCATED_MEMORY-Kennzeichnung festlegen.

Wenn das ISC_REQ_USE_SUPPLIED_CREDS-Kennzeichen festgelegt ist, muss das Sicherheitspaket im pInput-Eingabepuffer nach einem SECBUFFER_PKG_PARAMS Puffertyp suchen. Das ist keine generische Lösung, ermöglicht aber bei Bedarf eine starke Kopplung von Sicherheitspaketen und Anwendungen.

Wenn ISC_REQ_ALLOCATE_MEMORY angegeben wurde, muss der Aufrufer den Speicher freigeben, indem die FreeContextBuffer-Funktion aufgerufen wird.

Beispielsweise könnte die Ablehnung eines LAN-Managers das Eingabetoken sein. In diesem Fall wäre das Ausgabetoken die mit NTLM verschlüsselte Antwort auf die Abfrage.

Die Aktion, die der Client ausführt, hängt vom Rückgabecode dieser Funktion ab. Wenn der Rückgabecode SEC_E_OK ist, wird kein zweiter InitializeSecurityContext (General)-Aufruf ausgeführt und es wird keine Antwort vom Server erwartet. Wenn der Rückgabecode SEC_I_CONTINUE_NEEDED ist, erwartet der Client ein Token als Antwort vom Server und übergibt es in einem zweiten Aufruf an InitializeSecurityContext (General). Der SEC_I_COMPLETE_NEEDED Rückgabecode gibt an, dass der Client die Erstellung der Nachricht abschließen und die CompleteAuthToken-Funktion aufrufen muss. Der SEC_I_COMPLETE_AND_CONTINUE Code enthält beide Aktionen.

Wenn InitializeSecurityContext (General) für den ersten (oder einzigen) Aufruf „Erfolg“ zurückgibt, muss der Aufrufer schließlich die DeleteSecurityContext-Funktion für das zurückgegebene Handle aufrufen, auch wenn der Anruf bei einem späteren Teil des Authentifizierungsaustauschs fehlschlägt.

Der Client kann erneut InitializeSecurityContext (General) aufrufen, nachdem sie erfolgreich abgeschlossen wurde. Dies gibt an, dass für das Sicherheitspaket eine erneute Authentifizierung gewünscht wird.

Kernelmodusaufrufer weisen die folgenden Unterschiede auf: Der Zielname ist eine Unicode-Zeichenfolge, die mithilfe von VirtualAlloc im virtuellen Speicher zugewiesen werden muss. Sie darf nicht vom Pool zugewiesen werden. Puffer, die in pInput und pOutput übergeben und bereitgestellt werden, müssen sich im virtuellen Speicher befinden, nicht im Pool.

Wenn bei der Verwendung des Schannel-SSP die Funktion SEC_I_INCOMPLETE_CREDENTIALS zurückgibt, prüfen Sie, ob Sie ein gültiges und vertrauenswürdiges Zertifikat in Ihren Anmeldeinformationen angegeben haben. Das Zertifikat wird beim Aufrufen der AcquireCredentialsHandle (General)-Funktion angegeben. Das Zertifikat muss ein Clientauthentifizierungszertifikat (CA) sein, das von einer vom Server als vertrauenswürdig eingestuften Zertifizierungsstelle ausgestellt wurde. Um eine Liste der vom Server als vertrauenswürdig eingestuften CAs abzurufen, rufen Sie die QueryContextAttributes (General)-Funktion auf, und geben Sie das SECPKG_ATTR_ISSUER_LIST_EX-Attribut an.

Wenn Sie den Schannel-SSP verwenden, erstellt die Anwendung, nachdem eine Clientanwendung ein Authentifizierungszertifikat von einer vom Server vertrauenswürdigen Zertifizierungsstelle empfängt, eine neue Anmeldeinformation, indem sie die Funktion AcquireCredentialsHandle (General) und dann erneut InitializeSecurityContext (General) aufruft und die neuen Anmeldeinformationen im phCredential-Parameter angibt.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Header Sspi.h (einschließlich Security.h)
Bibliothek Secur32.lib
DLL Secur32.dll
Unicode- und ANSI-Name InitializeSecurityContextW (Unicode) und InitializeSecurityContextA (ANSI)

Siehe auch

SSPI-Funktionen

Unterstützen des erweiterten Schutzes für die Authentifizierung (EPA) in einem Dienst

AcceptSecurityContext (General)

AcquireCredentialsHandle (General)

CompleteAuthToken

DeleteSecurityContext

FreeContextBuffer

SecBuffer

SecBufferDesc