Abrufen alternativer Digestanmeldeinformationen

Füllen Sie zum Abrufen anderer Anmeldeinformationen als denen, die der aktuellen Anmeldesitzungzugeordnet sind, eine SEC _ WINNT-AUTH _ _ IDENTITY-Struktur mit Informationen für den alternativen Sicherheitsprinzipalauf. Übergeben Sie die -Struktur mithilfe des pAuthData-Parameters an die AcquireCredentialsHandle-Funktion.

In der folgenden Tabelle werden die Elemente der SEC _ WINNT _ AUTH _ IDENTITY-Struktur beschrieben.

Member BESCHREIBUNG
Benutzer Auf NULL endende Zeichenfolge, die den Namen des Sicherheitsprinzipals enthält, dessen Anmeldeinformationen zum Einrichten eines Sicherheitskontexts verwendet werden.
UserLength Die Länge des User-Members in Zeichen. Weglassen sie den abschließenden NULL-Wert.
Domäne Auf NULL endende Zeichenfolge, die die Domäne identifiziert, die das Konto des Sicherheitsprinzipals enthält.
DomainLength Die Länge des Domänenmembers in Zeichen. Weglassen sie den abschließenden NULL-Wert.
Kennwort Auf NULL endende Zeichenfolge, die das Kennwort des Sicherheitsprinzipals enthält.
PasswordLength Die Länge des Kennwortmembers in Zeichen. Weglassen sie den abschließenden NULL-Wert.
Flags Gibt an, ob die Zeichenfolgenmember im ANSI- oder Unicode-Format vorliegen.

In der folgenden Tabelle sind die gültigen Werte für den Flags-Member der -Struktur aufgeführt.

Konstante BESCHREIBUNG
SEC _ WINNT _ AUTH _ IDENTITY _ ANSI Zeichenfolgen in dieser Struktur liegen im ANSI-Format vor.
SEC _ WINNT _ AUTH _ IDENTITY _ UNICODE Zeichenfolgen in dieser Struktur haben das Unicode-Format.

Die Struktur und Konstanten werden in der Rpcdce.h-Headerdatei deklariert, die mit dem Platform Software Development Kit (SDK) verteilt wird.

Im folgenden Beispiel wird ein clientseitiger Aufruf zum Abrufen von Digest-Anmeldeinformationen für ein bestimmtes Benutzerkonto veranschaulicht.

#include <windows.h>

#ifdef UNICODE
  ClientAuthID.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
#else
  ClientAuthID.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
#endif

void main()
{
    SECURITY_STATUS SecStatus; 
    TimeStamp tsLifetime; 
    CredHandle hCred;
    SEC_WINNT_AUTH_IDENTITY ClientAuthID;
    LPTSTR UserName = TEXT("ASecurityPrinciple");
    LPTSTR DomainName = TEXT("AnAuthenticatingDomain");

    // Initialize the memory.
    ZeroMemory( &ClientAuthID, sizeof(ClientAuthID) );

    // Specify string format for the ClientAuthID structure.


    // Specify an alternate user, domain and password.
      ClientAuthID.User = (unsigned char *) UserName;
      ClientAuthID.UserLength = _tcslen(UserName);

      ClientAuthID.Domain = (unsigned char *) DomainName;
      ClientAuthID.DomainLength = _tcslen(DomainName);

    // Password is an application-defined LPTSTR variable
    // containing the user password.
      ClientAuthID.Password = Password;
      ClientAuthID.PasswordLength = _tcslen(Password);

    // Get the client side credential handle.
    SecStatus = AcquireCredentialsHandle (
      NULL,                  // Default principal.
      WDIGEST_SP_NAME,       // The Digest SSP. 
      SECPKG_CRED_OUTBOUND,  // Client will use the credentials.
      NULL,                  // Do not specify LOGON id.
      &ClientAuthID,         // User information.
      NULL,                  // Not used with Digest SSP.
      NULL,                  // Not used with Digest SSP.
      &hCred,                // Receives the credential handle.
      &tsLifetime            // Receives the credential time limit.
    );
}

Die _ tcslen-Funktion gibt die Zeichenfolgenlänge in Zeichen zurück, ohne das abschließende NULL-Zeichen.

Wenn Ihre Anwendung die bei der Anmeldung eingerichteten Anmeldeinformationen verwenden kann, finden Sie weitere Informationen unter Abrufen von Standardhestanmeldeinformationen.