Partager via


Obtention des informations d’identification de synthèse de remplacement

Pour obtenir des informations d’identification autres que celles associées à la session d’ouverture de session actuelle, renseignez une structure SEC_WINNT_AUTH_IDENTITY avec des informations pour le principal de sécurité de remplacement. Passez la structure à la fonction AcquireCredentialsHandle à l’aide du paramètre pAuthData .

Le tableau suivant décrit les membres de la structure SEC_WINNT_AUTH_IDENTITY .

Membre Description
Utilisateur Chaîne terminée par null contenant le nom du principal de sécurité dont les informations d’identification seront utilisées pour établir un contexte de sécurité.
UserLength Longueur du membre Utilisateur , en caractères. Omettez la valeur null de fin.
Domaine Chaîne terminée par null qui identifie le domaine contenant le compte du principal de sécurité.
DomainLength Longueur du membre Domain , en caractères. Omettez la valeur null de fin.
Mot de passe Chaîne terminée par null contenant le mot de passe du principal de sécurité.
PasswordLength Longueur du membre Password , en caractères. Omettez la valeur null de fin.
Indicateurs Indique si les membres de chaîne sont au format ANSI ou Unicode .

 

Le tableau suivant répertorie les valeurs valides pour le membre Flags de la structure.

Constante Description
SEC_WINNT_AUTH_IDENTITY_ANSI Les chaînes de cette structure sont au format ANSI.
SEC_WINNT_AUTH_IDENTITY_UNICODE Les chaînes de cette structure sont au format Unicode .

 

La structure et les constantes sont déclarées dans le fichier d’en-tête Rpcdce.h distribué avec le Kit de développement logiciel (SDK) de plateforme.

L’exemple suivant illustre un appel côté client pour obtenir les informations d’identification Digest pour un compte d’utilisateur spécifique.

#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.
    );
}

La fonction _tcslen retourne la longueur de chaîne en caractères, sans inclure le caractère null de fin.

Si votre application peut utiliser les informations d’identification établies lors de l’ouverture de session, consultez Obtention des informations d’identification digestes par défaut.