LsaLogonUser 関数 (ntsecapi.h)

LsaLogonUser 関数は、格納されている資格情報を使用してセキュリティ プリンシパルのログオン データを認証します。

認証が成功した場合、この関数は新しいログオン セッションを作成し、ユーザー トークンを返します。

新しい証明書資格情報を使用して新しいチケット許可チケット (TGT) を取得すると、システムのすべての TGT とサービス チケットが消去されます。 複合 ID のユーザー サービス チケットも消去されます。

構文

NTSTATUS LsaLogonUser(
  [in]           HANDLE              LsaHandle,
  [in]           PLSA_STRING         OriginName,
  [in]           SECURITY_LOGON_TYPE LogonType,
  [in]           ULONG               AuthenticationPackage,
  [in]           PVOID               AuthenticationInformation,
  [in]           ULONG               AuthenticationInformationLength,
  [in, optional] PTOKEN_GROUPS       LocalGroups,
  [in]           PTOKEN_SOURCE       SourceContext,
  [out]          PVOID               *ProfileBuffer,
  [out]          PULONG              ProfileBufferLength,
  [out]          PLUID               LogonId,
  [out]          PHANDLE             Token,
  [out]          PQUOTA_LIMITS       Quotas,
  [out]          PNTSTATUS           SubStatus
);

パラメーター

[in] LsaHandle

LsaRegisterLogonProcess の以前の呼び出しから取得したハンドル。

呼び出し元は、次の 1 つ以上が該当する場合にのみ SeTcbPrivilege を使用する必要があります。

  • サブ認証パッケージが使用されます。
  • KERB_S4U_LOGON が使用され、呼び出し元が偽装トークンを要求します。
  • LocalGroups パラメーターが NULL ではありません。
SeTcbPrivilege が必要ない場合は、LsaConnectUntrusted を呼び出してハンドルを取得します。

[in] OriginName

ログオン試行の発生元を識別する文字列。 詳細については、「解説」を参照してください。

[in] LogonType

要求されたログオンの種類を指定する SECURITY_LOGON_TYPE 列挙の値。 LogonType が Interactive または Batch の場合、新しいユーザーを表すプライマリ トークンが生成されます。 LogonType が Network の場合は、偽装トークンが生成されます。

[in] AuthenticationPackage

認証に使用する認証パッケージの識別子。 この値を取得するには、 LsaLookupAuthenticationPackage を呼び出します。

[in] AuthenticationInformation

ユーザー名やパスワードなどの認証情報を含む入力バッファーへのポインター。 このバッファーの形式と内容は、認証パッケージによって決まります。

このパラメーターには、MSV1_0および Kerberos 認証パッケージの次のいずれかの入力バッファー構造を指定できます。

意味
MSV1_0_INTERACTIVE_LOGON
MSV1_0
対話型ユーザー ログオンの認証。

MSV1_0_INTERACTIVE_LOGON構造体の LogonDomainNameUserNameおよび Password メンバーは、構造体自体に隣接するメモリ内のバッファーを指す必要があります。 AuthenticationInformationLength パラメーターの値は、これらのバッファーの長さを考慮する必要があります。

KERB_INTERACTIVE_LOGON
Kerberos
対話型ユーザー ログオンの認証。
KERB_TICKET_LOGON
Kerberos
初期ネットワーク ログオン時または切断時にユーザーを認証する。
KERB_TICKET_UNLOCK_LOGON
Kerberos
チケット更新時にユーザーを認証すると、通常のワークステーションのロック解除ログオンのバリエーションが示されます。
KERB_CERTIFICATE_LOGON
Kerberos
対話型スマート カード ログオンを使用したユーザーの認証。
KERB_CERTIFICATE_S4U_LOGON
Kerberos
ユーザー (S4U) ログオン用のサービスを使用したユーザーの認証。
KERB_CERTIFICATE_UNLOCK_LOGON
Kerberos
対話型スマート カード ログオン セッション中にロックされているワークステーションのロックを解除するためのユーザーの認証。
KERB_SMARTCARD_LOGON
Kerberos
LOGON32_PROVIDER_WINNT50またはLOGON32_PROVIDER_DEFAULTを使用したユーザー スマート カード ログオンの認証。
KERB_SMARTCARD_UNLOCK_LOGON
Kerberos
スマート カード ログオン セッション中にロックされているワークステーションのロックを解除するためのユーザーの認証。
KERB_S4U_LOGON
Kerberos
S4U クライアント要求を使用したユーザーの認証。 制約付き委任の場合、クライアントが LSA モード認証パッケージを使用してログオンした場合、LsaLogonUser の呼び出しは必要ありません。 Windows オペレーティング システムでは、 KerberosNTLMSecure ChannelDigest などがあります。 この呼び出しを成功させるには、次の条件を満たす必要があります。
  • 呼び出し元はドメイン アカウントである必要があります (コンピューターがドメイン メンバーの場合はLOCAL_SYSTEMが含まれます)。
  • サービス アカウントを使用する場合、偽装トークンを取得するには、ローカル コンピューターで SeTcbPrivilege が設定されている必要があります。 それ以外の場合は、ID トークンが使用されます。
  • 呼び出し元は、 Windows 2000 互換アクセス前 のメンバーであるか、クライアントのグループ メンバーシップへの読み取りアクセス権を持っている必要があります。 Windows 承認アクセス グループのメンバーシップは、クライアントのグループ メンバーシップへの読み取りアクセスを保証します。 Windows 承認アクセス グループを構成する方法については、Microsoft サポート技術情報を参照してください。
KERB_S4U_LOGON構造体の ClientUpn メンバーと ClientRealm メンバーは、構造体自体に隣接するメモリ内のバッファーを指す必要があります。 AuthenticationInformationLength パラメーターの値は、これらのバッファーの長さを考慮する必要があります。
MSV1_0_LM20_LOGON
MSV1_0
NTLM 2.0 プロトコル ログオンの後半を処理します。 この種類のログオンの前半は、MsV1_0Lm20ChallengeRequest メッセージで LsaCallAuthenticationPackage を呼び出すことによって実行されます。 詳細については、「MSV1_0_PROTOCOL_MESSAGE_TYPEのMsV1_0Lm20ChallengeRequestの説明」を参照してください。

この種類のログオンでは、サブ認証パッケージを使用できます。

MSV1_0_SUBAUTH_LOGON
MSV1_0
サブ認証を使用してユーザーを認証する。
 

他の認証パッケージで使用されるバッファーの詳細については、これらの認証パッケージのドキュメントを参照してください。

[in] AuthenticationInformationLength

AuthenticationInformation バッファーの長さ (バイト単位)。

[in, optional] LocalGroups

認証されたユーザーのトークンに追加する追加のグループ識別子の一覧。 これらのグループ識別子は、既定のグループ WORLD とログオンの種類グループ (Interactive、Batch、または Network) と共に追加されます。これは、すべてのユーザー トークンに自動的に含まれます。

[in] SourceContext

ソース モジュール (セッション マネージャーなど) とそのモジュールに役立つコンテキストを識別するTOKEN_SOURCE構造。 この情報はユーザー トークンに含まれており、 GetTokenInformation を呼び出すことで取得できます。

[out] ProfileBuffer

ログオン シェルやホーム ディレクトリなどの認証情報を含む出力バッファーのアドレスを受け取る void ポインターへのポインター。

このパラメーターには、MSV1_0および Kerberos 認証パッケージの次のいずれかの出力バッファー構造を指定できます。

意味
MSV1_0_INTERACTIVE_PROFILE
MSV1_0
対話型ユーザーのログオン プロファイル。
KERB_TICKET_PROFILE
Kerberos
ログオン、切断、チケット更新の認証出力。
MSV1_0_LM20_LOGON
MSV1_0
NTLM 2.0 プロトコル ログオンの後半を処理するときの出力。
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
サブ認証で認証を使用する場合の出力。
 

他の認証パッケージで使用されるバッファーの詳細については、その認証パッケージのドキュメントを参照してください。

このバッファーが不要になった場合、呼び出し元のアプリケーションは LsaFreeReturnBuffer 関数を呼び出して、このバッファーを解放する必要があります。

[out] ProfileBufferLength

返されたプロファイル バッファーの長さをバイト単位で受け取る ULONG へのポインター。

[out] LogonId

ログオン セッションを一意に識別する LUID を 受け取るバッファーへのポインター。 この LUID は、ログオン情報を認証したドメイン コントローラーによって割り当てられます。

[out] Token

このセッション用に作成された新しいユーザー トークンを受け取るハンドルへのポインター。 トークンの使用が完了したら、 CloseHandle 関数を呼び出してトークンを解放します。

[out] Quotas

プライマリ トークンが返されると、このパラメーターは、新しくログオンしたユーザーの初期プロセスに割り当てられたプロセス クォータ制限を含む QUOTA_LIMITS 構造を受け取ります。

[out] SubStatus

アカウントの制限によりログオンに失敗した場合、このパラメーターはログオンが失敗した理由に関する情報を受け取ります。 この値は、ユーザーのアカウント情報が有効で、ログオンが拒否された場合にのみ設定されます。

このパラメーターには、MSV1_0認証パッケージの 次の SubStatus 値のいずれかを指定できます。

意味
STATUS_INVALID_LOGON_HOURS
ユーザー アカウントには時間制限があり、現時点ではログオンに使用できません。
STATUS_INVALID_WORKSTATION
ユーザー アカウントにはワークステーションの制限があり、現在のワークステーションからのログオンには使用できません。
STATUS_PASSWORD_EXPIRED
ユーザー アカウントのパスワードの有効期限が切れています。
STATUS_ACCOUNT_DISABLED
ユーザー アカウントは現在無効になっており、ログオンには使用できません。

戻り値

関数が成功した場合、関数はSTATUS_SUCCESSを返します。

関数が失敗した場合、 NTSTATUS コードが返されます。これは、次のいずれかの値になります。

説明
STATUS_QUOTA_EXCEEDED
呼び出し元のメモリ クォータは、認証パッケージによって返される出力バッファーを割り当てるには不十分です。
STATUS_ACCOUNT_RESTRICTION
ユーザー アカウントとパスワードは正当なものですが、ユーザー アカウントには、現時点でのログオンを妨げる制限があります。 詳細については、 SubStatus パラメーターに格納されている値を参照してください。
STATUS_BAD_VALIDATION_CLASS
指定された認証情報は、認証パッケージによって認識されません。
STATUS_LOGON_FAILURE
ログインに失敗しました。 エラーの理由は指定されていませんが、一般的な理由には、ユーザー名のスペルミスやパスワードのスペルミスが含まれます。
STATUS_NO_LOGON_SERVERS
認証要求を処理するために使用できるドメイン コントローラーはありません。
STATUS_NO_SUCH_PACKAGE
指定された認証パッケージは LSA によって認識されません。
STATUS_PKINIT_FAILURE
Kerberos クライアントが、無効な KDC 証明書を受信しました。 デバイス ログオンの場合は、KDC の厳密な検証が必要であるため、KDC には "Kerberos 認証" テンプレートを使用する証明書または同等の証明書が必要です。 また、KDC 証明書の有効期限が切れているか、失効しているか、クライアントが間違ったサーバーに要求を送信するアクティブな攻撃を受けている可能性があります。
STATUS_PKINIT_CLIENT_FAILURE
Kerberos クライアントが無効なシステム証明書を使用しています。 デバイス ログオンの場合は、DNS 名が必要です。 また、システム証明書の有効期限が切れているか、間違った証明書が選択されている可能性があります。
 

詳細については、「 LSA ポリシー関数の戻り値」を参照してください。

LsaNtStatusToWinError 関数は、NTSTATUS コードを Windows エラー コードに変換します。

注釈

OriginName パラメーターは意味のある情報を指定する必要があります。 たとえば、ターミナル 1 を示す "TTY1" または "NTLM - リモート ノード JAZZ" を含み、"JAZZ" というリモート ノードを介して NTLM を使用するネットワーク ログオンを示します。

LOCAL_SYSTEMとNETWORK_SERVICEの PKINIT デバイス資格情報を更新するには、 LsaLogonUser を個別に呼び出す必要があります。 PKINIT デバイス資格情報がない場合、正常な呼び出しでは操作は行われません。 PKINIT デバイス資格情報がある場合、正常な呼び出しによって PKINIT デバイス資格情報がクリーンアップされ、パスワード資格情報のみが残ります。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー ntsecapi.h
Library Secur32.lib
[DLL] Secur32.dll

こちらもご覧ください

匿名アクセスの許可

LsaCallAuthenticationPackage

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage