次の方法で共有


代替ダイジェスト資格情報の取得

現在ログオン セッションに関連付けられている資格情報以外の資格情報を取得するには、代替セキュリティ プリンシパルの情報をSEC_WINNT_AUTH_IDENTITY構造体に設定します。 pAuthData パラメーターを使用して、AcquireCredentialsHandle 関数に構造体を渡します。

次の表では、 SEC_WINNT_AUTH_IDENTITY 構造体のメンバーについて説明します。

メンバー 説明
User セキュリティ コンテキストの確立に資格情報を使用するセキュリティ プリンシパルの名前を含む Null で終わる文字列。
UserLength User メンバーの長さ (文字数)。 終端の null を省略します。
ドメイン セキュリティ プリンシパルのアカウントを含むドメインを識別する Null で終わる文字列。
DomainLength Domain メンバーの長さ (文字数)。 終端の null を省略します。
パスワード セキュリティ プリンシパルのパスワードを含む Null で終わる文字列。
PasswordLength Password メンバーの長さ (文字数)。 終端の null を省略します。
Flags 文字列メンバーが ANSI 形式か Unicode 形式かを示します。

 

次の表に、構造体の Flags メンバーの有効な値を示します。

定数 説明
SEC_WINNT_AUTH_IDENTITY_ANSI この構造体の文字列は ANSI 形式です。
SEC_WINNT_AUTH_IDENTITY_UNICODE この構造体の文字列は Unicode 形式です。

 

構造体と定数は、プラットフォーム ソフトウェア開発キット (SDK) と共に配布される Rpcdce.h ヘッダー ファイルで宣言されています。

次の例では、特定のユーザー アカウントのダイジェスト資格情報を取得するためのクライアント側の呼び出しを示します。

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

_tcslen関数は、終端の null 文字を含めず、文字列の長さを文字数で返します。

アプリケーションでログオン時に確立された資格情報を使用できる場合は、「 既定のダイジェスト資格情報の取得」を参照してください。