InitializeSecurityContext (General)-Funktion

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

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

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

Thema BESCHREIBUNG
InitializeSecurityContext (CredSSP) Initiiert den clientseitigen ausgehenden Sicherheitskontext von einem Anmeldeinformationshandle mithilfe des CredSSP-Sicherheitspakets (Credential Security Support Provider).
InitializeSecurityContext (Digest) Initiiert den clientseitigen ausgehenden Sicherheitskontext aus einem Anmeldeinformationshandle mithilfe des Digestsicherheitspakets.
InitializeSecurityContext (Kerberos) Initiiert den clientseitigen ausgehenden Sicherheitskontext aus einem Anmeldeinformationshandle mithilfe des Kerberos-Sicherheitspakets.
InitializeSecurityContext (Negotiate) Initiiert den clientseitigen ausgehenden Sicherheitskontext aus einem Anmeldeinformationshandle mithilfe des Negotiate-Sicherheitspakets.
InitializeSecurityContext (NTLM) Initiiert den clientseitigen ausgehenden Sicherheitskontext aus einem Anmeldeinformationshandle mithilfe des NTLM-Sicherheitspakets.
InitializeSecurityContext (Schannel) Initiiert den clientseitigen ausgehenden Sicherheitskontext aus einem Anmeldeinformationshandle 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 (Allgemein)zurückgegeben werden. Dieses Handle wird verwendet, um den Sicherheitskontextzu erstellen. Die InitializeSecurityContext (General)-Funktion erfordert mindestens OUTBOUND-Anmeldeinformationen.

phContext [ in, optional]

Ein Zeiger auf eine CTXTHandle-Struktur. Beim ersten Aufruf von InitializeSecurityContext (Allgemein) ist dieser Zeiger NULL. Beim zweiten Aufruf ist dieser Parameter ein Zeiger auf das Handle auf den teilweise gebildeten Kontext, der durch den ersten Aufruf im phNewContext-Parameter zurückgegeben wird.

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

Wenn Sie den Schannel-SSP verwenden, geben Sie beim ersten Aufruf von InitializeSecurityContext (Allgemein) NULL an. Geben Sie bei zukünftigen Aufrufen das Token an, das im parameter phNewContext nach dem ersten Aufruf dieser Funktion empfangen wird.

pTargetName [ in, optional]

Ein Zeiger auf eine auf NULL endende Zeichenfolge, die das Ziel des Kontexts angibt. Die Zeichenfolgeninhalte sind sicherheitspaketspezifisch, wie in der folgenden Tabelle beschrieben. Diese Liste ist nicht vollständig. Einem System können zusätzliche System-SSPs und Drittanbieter-SSPs hinzugefügt werden.

Verwendeter SSPBedeutung
Digest
Auf NULL endende Zeichenfolge, die den URI der angeforderten Ressource eindeutig identifiziert. Die Zeichenfolge muss aus Zeichen bestehen, die in einem URI zulässig sind, und muss durch den US ASCII-Codesatz darstellbar sein. Die Prozentcodierung kann verwendet werden, um Zeichen außerhalb des US ASCII-Codesatzes darzustellen.
Kerberos oder Negotiate
Dienstprinzipalname (SPN) oder der [*Sicherheitskontext*](../secgloss/s-gly.md) des Zielservers.
NTLM
Dienstprinzipalname (SPN) oder der [*Sicherheitskontext*](../secgloss/s-gly.md) des Zielservers.
Schannel/SSL
Auf NULL endende 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 der 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 Handle für Anmeldeinformationen ist identisch.

fContextReq [ In]

Bitflags, die Anforderungen für den Kontext angeben. Nicht alle Pakete können alle Anforderungen unterstützen. Flags, die für diesen Parameter verwendet werden, haben das Präfix ISC _ _ REQ, z. B. ISC _ REQ _ DELEGATE. Dieser Parameter kann mindestens eines der folgenden Attributflags sein.

WertBedeutung
ISC_REQ_ALLOCATE_MEMORY
Das [*Sicherheitspaket*](../secgloss/s-gly.md) ordnet Ihnen Ausgabepuffer zu. Wenn Sie die Verwendung der Ausgabepuffer abgeschlossen haben, können Sie sie freigeben, indem Sie die Funktion[FreeContextBuffer](/windows/win32/api/sspi/nf-sspi-freecontextbuffer) aufrufen.
ISC_REQ_CONFIDENTIALITY
Verschlüsseln Sie Nachrichten mithilfe der Funktion[EncryptMessage](encryptmessage--general.md).
ISC_REQ_CONNECTION
Der [*Sicherheitskontext*](../secgloss/s-gly.md) verarbeitet keine Formatierungsmeldungen. Dieser Wert ist der Standardwert für die [*eingeschränkte*](../secgloss/s-gly.md)Kerberos-, Negotiate- und NTLM-Delegierung.
ISC_REQ_DELEGATE
Der Server kann den Kontext verwenden, um sich bei anderen Servern als Client zu authentifizieren. Das ISC_REQ_MUTUAL_AUTH-Flag muss festgelegt werden, damit dieses Flag funktioniert. Gültig für Kerberos. Ignorieren Sie dieses Flag für [*die eingeschränkte Delegierung.*](../secgloss/c-gly.md)
ISC_REQ_EXTENDED_ERROR
Wenn Fehler auftreten, wird die Remotepartei benachrichtigt.
ISC_REQ_HTTP
Verwenden Sie Digest für HTTP. Lassen Sie dieses Flag aus, um Digest als SASL-Mechanismus zu verwenden.
ISC_REQ_INTEGRITY
Signieren Sie Nachrichten, und überprüfen Sie Signaturen mithilfe der Funktionen [EncryptMessage](encryptmessage--general.md) und [MakeSignature](makesignature.md).
ISC_REQ_MANUAL_CRED_VALIDATION
Schannel darf den Server nicht automatisch authentifizieren.
ISC_REQ_MUTUAL_AUTH
Die gegenseitige Authentifizierungsrichtlinie des Diensts wird erfüllt.
[!Caution]
Dies bedeutet nicht unbedingt, dass die gegenseitige Authentifizierung ausgeführt wird, sondern nur, dass die Authentifizierungsrichtlinie des Diensts erfüllt ist. Um sicherzustellen, dass die gegenseitige Authentifizierung durchgeführt wird, rufen Sie die Funktion [QueryContextAttributes (Allgemein)](querycontextattributes--general.md) auf.

ISC_REQ_NO_INTEGRITY
Wenn dieses Flag festgelegt ist, wird das flag ISC_REQ_INTEGRITY ignoriert.
Dieser Wert wird nur von den [*eingeschränkten Delegierungen*](../secgloss/s-gly.md)negotiate und Kerberos unterstützt.
ISC_REQ_REPLAY_DETECT
Erkennen sie wiedergegebene Nachrichten, die mithilfe der Funktionen [EncryptMessage](encryptmessage--general.md) oder [MakeSignature](makesignature.md) codiert wurden.
ISC_REQ_SEQUENCE_DETECT
Erkennen von Nachrichten, die nicht sequenziert empfangen werden.
ISC_REQ_STREAM
Unterstützt eine streamorientierte Verbindung.
ISC_REQ_USE_SESSION_KEY
Ein neuer [*Sitzungsschlüssel*](../secgloss/s-gly.md) muss ausgehandelt werden.
Dieser Wert wird nur von der eingeschränkten [*Kerberos-Delegierung unterstützt.*](../secgloss/s-gly.md)
ISC_REQ_USE_SUPPLIED_CREDS
Schannel darf nicht versuchen, anmeldeinformationen für den Client automatisch anzugeben.

Die angeforderten Attribute werden vom Client möglicherweise nicht unterstützt. Weitere Informationen finden Sie unter dem parameter pfContextAttr.

Weitere Beschreibungen der verschiedenen Attribute finden Sie unter Kontextanforderungen.

Reserviert1 [ In]

Dieser Parameter ist reserviert und muss auf 0 (null) festgelegt werden.

TargetDataRep [ In]

Die Datendarstellung, z. B. die Byte reihenfolge, 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 0 (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 wenn der Clientkontext vom Server initiiert wurde, ist der Wert dieses Parameters ein Zeiger auf einen Puffer, der mit genügend Arbeitsspeicher zum Speichern des vom Remotecomputer zurückgegebenen Tokens zugeordnet ist.

Reserved2 [ In]

Dieser Parameter ist reserviert und muss auf 0 (null) festgelegt werden.

phNewContext [ in, out, optional]

Ein Zeiger auf eine CTXTHandle-Struktur. Beim ersten Aufruf von InitializeSecurityContext (Allgemein) empfängt dieser Zeiger das neue Kontexthand handle. Beim zweiten Aufruf kann phNewContext mit dem im phContext-Parameter angegebenen Handle identisch sein.

Übergeben Sie bei Verwendung des Schannel-SSP bei Aufrufen nach dem ersten Aufruf das hier zurückgegebene Handle als phContext-Parameter, und geben Sie NULL für phNewContext an.

pOutput [ in, out, optional]

Ein Zeiger auf eine SecBufferDesc-Struktur, die Zeiger auf die SecBuffer-Struktur enthält, die die Ausgabedaten empfängt. Wenn ein Puffer in der Eingabe als SEC _ READWRITE eingegeben wurde, ist er in der Ausgabe vorhanden. Das System ordnet bei Eineranforderung (über ISC REQ ALLOCATE MEMORY) einen Puffer für das Sicherheitstoken zu und füllt die Adresse im Pufferdeskriptor für das _ _ _ Sicherheitstoken aus.

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

Wenn bei Verwendung des Schannel-SSP das ISC REQ ALLOCATE MEMORY-Flag angegeben ist, weist der Schannel-SSP Arbeitsspeicher für den Puffer zu und gibt die entsprechenden Informationen _ _ in _ secBufferDesc ab. 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 einen Satz von Bitflags zu empfangen, die die Attribute des eingerichteten Kontexts angeben. Eine Beschreibung der verschiedenen Attribute finden Sie unter Kontextanforderungen.

Flags, die für diesen Parameter verwendet werden, wird ISC _ RET vorangestellt, z. B. ISC _ RET _ DELEGATE. Eine Liste der gültigen Werte finden Sie unter dem fContextReq-Parameter.

Überprüfen Sie erst nach sicherheitsbezogenen Attributen, wenn der letzte Funktionsaufruf erfolgreich zurückgegeben wird. Attributflags, die sich nicht auf die Sicherheit bezieht, z. B. das ASC _ RET ALLOCATED MEMORY-Flag, 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, die die Ablaufzeit des Kontexts empfängt. Es wird empfohlen, dass das Sicherheitspaket diesen Wert immer in Ortszeit zurück gibt. Dieser Parameter ist optional, und NULL sollte für kurzlebige Clients übergeben werden.

Es gibt keine Ablaufzeit für Microsoft Digest SSP-Sicherheitskontextsoder 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 (Allgemein).
SEC _ I _ COMPLETE _ NEEDED
Der Client muss die Meldung fertig stellen 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 von InitializeSecurityContext (Allgemein) übergeben. Das Ausgabetoken kann leer sein.
SEC _ I _ INCOMPLETE _ CREDENTIALS
Verwenden Sie mit Schannel. Der Server hat die Clientauthentifizierung angefordert, und die angegebenen Anmeldeinformationen enthalten entweder kein Zertifikat, oder das Zertifikat wurde nicht von einer Zertifizierungsstelle ausgestellt, die vom Server als vertrauenswürdig eingestuft wird. Weitere Informationen finden Sie in den Hinweisen.
SEC _ E _ INCOMPLETE _ MESSAGE
Verwenden Sie mit Schannel. Daten für die gesamte Nachricht wurden nicht aus dem Netzwerk gelesen.
Wenn dieser Wert zurückgegeben wird, enthält der pInput-Puffer eine SecBuffer-Struktur mit einem BufferType-Member von SECBUFFER _ MISSING. Der cbBuffer-Member von SecBuffer enthält einen Wert, der die Anzahl zusätzlicher Bytes angibt, die die Funktion aus dem Client lesen muss, bevor diese Funktion erfolgreich ausgeführt wird. Obwohl diese Zahl nicht immer genau ist, kann ihre Verwendung zur Verbesserung der Leistung beitragen, indem mehrere Aufrufe dieser Funktion vermieden werden.
SEC _ E _ OK
Der Sicherheitskontext wurde erfolgreich initialisiert. Es ist kein weiterer InitializeSecurityContext (General)-Aufruf erforderlich. Wenn die Funktion ein Ausgabetoken zurückgibt, das heißt, wenn das SECBUFFER-TOKEN in pOutput eine Länge ungleich _ 0 (null) hat, 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
_S.E _ NICHT GENÜGEND _ ARBEITSSPEICHER
Es ist nicht genügend Arbeitsspeicher verfügbar, um die angeforderte Aktion abschließen zu können.
INTERNER _ FEHLER IN SEKUNDE E _ _
Es ist ein Fehler aufgetreten, der einem SSPI-Fehlercode nicht zuordnen konnte.
SEC _ E _ UNGÜLTIGES _ HANDLE
Das an die Funktion übergebene Handle ist ungültig.
SEC _ E _ UNGÜLTIGES _ TOKEN
Der Fehler ist auf ein falsch formatiertes Eingabetoken zurück, 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 wird. Die Übergabe eines Tokens an das falsche Paket kann passieren, wenn client und server nicht das richtige Sicherheitspaket aushandelt haben.
SEC _ E _ LOGON _ DENIED
Fehler bei der Anmeldung.
S. _ E _ KEINE _ _ AUTHENTIFIZIERUNGSSTELLE
Es konnte keine Autorität für die Authentifizierung kontaktiert werden. Der Domänenname der authentifizierenden Partei kann falsch sein, die Domäne kann nicht erreichbar sein, oder es ist ein Vertrauensstellungsfehler vor worden.
SEC _ E _ NO _ CREDENTIALS
Im Sicherheitspaket sind keine Anmeldeinformationen verfügbar.
SEC _ E _ TARGET _ UNKNOWN
Das Ziel wurde nicht erkannt.
SEC _ E NICHT UNTERSTÜTZTE _ _ FUNKTION
Ein ungültiges Kontextattributflag (ISC _ REQ _ DELEGATE oder ISC _ REQ PROMPT FOR _ _ CREDS) wurde im _ fContextReq-Parameter angegeben.
SEC _ E _ WRONG _ PRINCIPAL
Der Prinzipal, der die Authentifizierungsanforderung empfangen hat, ist nicht identisch mit dem Prinzipal, der an den parameter pszTargetName übergeben wird. 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 z. B. Vertraulichkeit angefordert wurde, aber nicht eingerichtet werden konnte, können einige Anwendungen die Verbindung sofort beenden.

Wenn attribute des Sicherheitskontexts nicht ausreichen, muss der Client den teilweise erstellten Kontext freigeben, indem er die DeleteSecurityContext-Funktion aufruft.

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

Für einen zweistufigen Sicherheitskontextsieht die aufrufende Sequenz wie folgt aus:

  1. Der Client ruft die Funktion auf, wobei phContext auf NULL festgelegt ist, und füllt den Pufferdeskriptor mit der Eingabenachricht aus.
  2. Das Sicherheitspaket untersucht die Parameter und erstellt ein nicht transparentes Token und platziert es im TOKEN-Element im Pufferarray. Wenn der fContextReq-Parameter das ISC _ REQ _ ALLOCATE _ MEMORY-Flag enthält, ordnet das Sicherheitspaket den Arbeitsspeicher 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 dann das Token als Eingabeargument in einem Aufruf der AcceptSecurityContext (General)-Funktion.
  4. AcceptSecurityContext (Allgemein) gibt möglicherweise ein Token zurück, 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.

Für mehrstufige Sicherheitskontexte,z. B. gegenseitige Authentifizierung, sieht die aufrufende Sequenz wie folgt aus:

  1. Der Client ruft die Funktion wie zuvor beschrieben auf, aber das Paket gibt den Erfolgscode SEC _ I CONTINUE _ NEEDED _ 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 (Allgemein) erneut auf, wobei phContext auf das Handle festgelegt ist, das vom letzten Aufruf zurückgegeben wurde. Das vom Server empfangene Token wird im pInput-Parameter bereitgestellt.

Wenn der Server erfolgreich geantwortet 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 Sicherheitskontextssind abhängig vom zugrunde liegenden Authentifizierungsmechanismus und den im fContextReq-Parameter angegebenen Optionen möglicherweise mehr als ein Aufruf dieser Funktion erforderlich.

Die Parameter fContextReq und pfContextAttributes sind Bitmasken, die verschiedene Kontextattribute darstellen. Eine Beschreibung der verschiedenen Attribute finden Sie unter Kontextanforderungen. Der pfContextAttributes-Parameter ist bei jeder erfolgreichen Rückgabe gültig, aber nur bei der endgültigen erfolgreichen Rückgabe sollten Sie die Flags untersuchen, die sicherheitsaspekte des Kontexts betreffen. Zwischenrücksetzungen können z. B. das ISC _ RET _ ALLOCATED _ MEMORY-Flag festlegen.

Wenn das ISC _ REQ _ USE _ SUPPLIED _ CREDS-Flag festgelegt ist, muss das Sicherheitspaket nach einem SECBUFFER _ PKG _ PARAMS-Puffertyp im pInput-Eingabepuffer suchen. Dies ist keine generische Lösung, ermöglicht aber bei Bedarf eine starke Kopplung von Sicherheitspaket und Anwendung.

Wenn ISC _ REQ _ ALLOCATE MEMORY angegeben _ wurde, muss der Aufrufer den Arbeitsspeicher freigeben, indem er die FreeContextBuffer-Funktion aufruft.

Das Eingabetoken kann z. B. die Herausforderung eines LAN-Managers sein. In diesem Fall ist das Ausgabetoken die NTLM-verschlüsselte Antwort auf die Abfrage.

Die Aktion, die der Client vornimmt, hängt vom Rückgabecode dieser Funktion ab. Wenn der Rückgabecode SEC _ E _ OK lautet, erfolgt kein zweiter InitializeSecurityContext (General)-Aufruf, und es wird keine Antwort vom Server erwartet. Wenn der Rückgabecode SEC _ I _ CONTINUE NEEDED _ lautet, erwartet der Client ein Token als Antwort vom Server und übergibt es in einem zweiten Aufruf an InitializeSecurityContext (Allgemein). 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 umfasst beide Aktionen.

Wenn InitializeSecurityContext (General) beim ersten (oder nur) Aufruf erfolgreich ist, muss der Aufrufer schließlich die DeleteSecurityContext-Funktion für das zurückgegebene Handle aufrufen, auch wenn der Aufruf in einem späteren Abschnitt des Authentifizierungsaustauschs fehlschlägt.

Der Client kann InitializeSecurityContext (Allgemein) erneut aufrufen, nachdem er erfolgreich abgeschlossen wurde. Dies gibt dem Sicherheitspaket an, dass eine erneute Authentifizierung gewünscht ist.

Kernelmodusaufrufer weisen die folgenden Unterschiede auf: Der Zielname ist eine Unicode-Zeichenfolge, die mit VirtualAllocim virtuellen Speicher zugeordnet werden muss. er darf nicht aus dem Pool zugeordnet werden. In pInput und pOutput übergebene und bereitgestellte Puffer müssen sich im virtuellen Speicher und nicht im Pool befinden.

Wenn Sie den Schannel-SSP verwenden und die Funktion SEC _ I _ INCOMPLETE CREDENTIALS zurückgibt, _ überprüfen Sie, ob Sie in Ihren Anmeldeinformationen ein gültiges und vertrauenswürdiges Zertifikat angegeben haben. Das Zertifikat wird beim Aufrufen der Funktion AcquireCredentialsHandle (Allgemein) angegeben. Das Zertifikat muss ein Clientauthentifizierungszertifikat sein, das von einer Zertifizierungsstelle ausgestellt wurde, die dem Server vertraut. Um eine Liste der Zertifizierungsstellen abzurufen, denen der Server vertraut, 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 Zertifizierungsstelle empfangen hat, die vom Server als vertrauenswürdig eingestuft wird, neue Anmeldeinformationen, indem sie die Funktion AcquireCredentialsHandle (Allgemein) aufruft und anschließend erneut InitializeSecurityContext (Allgemein) aufruft, wobei die neuen Anmeldeinformationen im phCredential-Parameter angegeben werden.

Anforderungen

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

Weitere Informationen

SSPI-Funktionen

AcceptSecurityContext (Allgemein)

AcquireCredentialsHandle (allgemein)

CompleteAuthToken

DeleteSecurityContext

FreeContextBuffer

SecBuffer

SecBufferDesc