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 ではありません。
[in] OriginName
ログオン試行の発生元を識別する文字列。 詳細については、「解説」を参照してください。
[in] LogonType
要求されたログオンの種類を指定する SECURITY_LOGON_TYPE 列挙の値。 LogonType が Interactive または Batch の場合、新しいユーザーを表すプライマリ トークンが生成されます。 LogonType が Network の場合は、偽装トークンが生成されます。
[in] AuthenticationPackage
認証に使用する認証パッケージの識別子。 この値を取得するには、 LsaLookupAuthenticationPackage を呼び出します。
[in] AuthenticationInformation
ユーザー名やパスワードなどの認証情報を含む入力バッファーへのポインター。 このバッファーの形式と内容は、認証パッケージによって決まります。
このパラメーターには、MSV1_0および Kerberos 認証パッケージの次のいずれかの入力バッファー構造を指定できます。
値 | 意味 |
---|---|
|
対話型ユーザー ログオンの認証。
MSV1_0_INTERACTIVE_LOGON構造体の LogonDomainName、UserName、および Password メンバーは、構造体自体に隣接するメモリ内のバッファーを指す必要があります。 AuthenticationInformationLength パラメーターの値は、これらのバッファーの長さを考慮する必要があります。 |
|
対話型ユーザー ログオンの認証。 |
|
初期ネットワーク ログオン時または切断時にユーザーを認証する。 |
|
チケット更新時にユーザーを認証すると、通常のワークステーションのロック解除ログオンのバリエーションが示されます。 |
|
対話型スマート カード ログオンを使用したユーザーの認証。 |
|
ユーザー (S4U) ログオン用のサービスを使用したユーザーの認証。 |
|
対話型スマート カード ログオン セッション中にロックされているワークステーションのロックを解除するためのユーザーの認証。 |
|
LOGON32_PROVIDER_WINNT50またはLOGON32_PROVIDER_DEFAULTを使用したユーザー スマート カード ログオンの認証。 |
|
スマート カード ログオン セッション中にロックされているワークステーションのロックを解除するためのユーザーの認証。 |
|
S4U クライアント要求を使用したユーザーの認証。
制約付き委任の場合、クライアントが LSA モード認証パッケージを使用してログオンした場合、LsaLogonUser の呼び出しは必要ありません。 Windows オペレーティング システムでは、 Kerberos、 NTLM、 Secure Channel、 Digest などがあります。 この呼び出しを成功させるには、次の条件を満たす必要があります。
|
|
NTLM 2.0 プロトコル ログオンの後半を処理します。 この種類のログオンの前半は、MsV1_0Lm20ChallengeRequest メッセージで LsaCallAuthenticationPackage を呼び出すことによって実行されます。 詳細については、「MSV1_0_PROTOCOL_MESSAGE_TYPEのMsV1_0Lm20ChallengeRequestの説明」を参照してください。
この種類のログオンでは、サブ認証パッケージを使用できます。 |
|
サブ認証を使用してユーザーを認証する。 |
他の認証パッケージで使用されるバッファーの詳細については、これらの認証パッケージのドキュメントを参照してください。
[in] AuthenticationInformationLength
AuthenticationInformation バッファーの長さ (バイト単位)。
[in, optional] LocalGroups
認証されたユーザーのトークンに追加する追加のグループ識別子の一覧。 これらのグループ識別子は、既定のグループ WORLD とログオンの種類グループ (Interactive、Batch、または Network) と共に追加されます。これは、すべてのユーザー トークンに自動的に含まれます。
[in] SourceContext
ソース モジュール (セッション マネージャーなど) とそのモジュールに役立つコンテキストを識別するTOKEN_SOURCE構造。 この情報はユーザー トークンに含まれており、 GetTokenInformation を呼び出すことで取得できます。
[out] ProfileBuffer
ログオン シェルやホーム ディレクトリなどの認証情報を含む出力バッファーのアドレスを受け取る void ポインターへのポインター。
このパラメーターには、MSV1_0および Kerberos 認証パッケージの次のいずれかの出力バッファー構造を指定できます。
他の認証パッケージで使用されるバッファーの詳細については、その認証パッケージのドキュメントを参照してください。
このバッファーが不要になった場合、呼び出し元のアプリケーションは LsaFreeReturnBuffer 関数を呼び出して、このバッファーを解放する必要があります。
[out] ProfileBufferLength
返されたプロファイル バッファーの長さをバイト単位で受け取る ULONG へのポインター。
[out] LogonId
ログオン セッションを一意に識別する LUID を 受け取るバッファーへのポインター。 この LUID は、ログオン情報を認証したドメイン コントローラーによって割り当てられます。
[out] Token
このセッション用に作成された新しいユーザー トークンを受け取るハンドルへのポインター。 トークンの使用が完了したら、 CloseHandle 関数を呼び出してトークンを解放します。
[out] Quotas
プライマリ トークンが返されると、このパラメーターは、新しくログオンしたユーザーの初期プロセスに割り当てられたプロセス クォータ制限を含む QUOTA_LIMITS 構造を受け取ります。
[out] SubStatus
アカウントの制限によりログオンに失敗した場合、このパラメーターはログオンが失敗した理由に関する情報を受け取ります。 この値は、ユーザーのアカウント情報が有効で、ログオンが拒否された場合にのみ設定されます。
このパラメーターには、MSV1_0認証パッケージの 次の SubStatus 値のいずれかを指定できます。
戻り値
関数が成功した場合、関数はSTATUS_SUCCESSを返します。
関数が失敗した場合、 NTSTATUS コードが返されます。これは、次のいずれかの値になります。
値 | 説明 |
---|---|
|
呼び出し元のメモリ クォータは、認証パッケージによって返される出力バッファーを割り当てるには不十分です。 |
|
ユーザー アカウントとパスワードは正当なものですが、ユーザー アカウントには、現時点でのログオンを妨げる制限があります。 詳細については、 SubStatus パラメーターに格納されている値を参照してください。 |
|
指定された認証情報は、認証パッケージによって認識されません。 |
|
ログインに失敗しました。 エラーの理由は指定されていませんが、一般的な理由には、ユーザー名のスペルミスやパスワードのスペルミスが含まれます。 |
|
認証要求を処理するために使用できるドメイン コントローラーはありません。 |
|
指定された認証パッケージは LSA によって認識されません。 |
|
Kerberos クライアントが、無効な KDC 証明書を受信しました。 デバイス ログオンの場合は、KDC の厳密な検証が必要であるため、KDC には "Kerberos 認証" テンプレートを使用する証明書または同等の証明書が必要です。 また、KDC 証明書の有効期限が切れているか、失効しているか、クライアントが間違ったサーバーに要求を送信するアクティブな攻撃を受けている可能性があります。 |
|
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 |