LSA_AP_LOGON_USER コールバック関数 (ntsecpkg.h)
ユーザーのログオン資格情報を認証します。
この関数は、ユーザーの初回ログオンに対してのみ呼び出されます。 後続の認証要求では 、LsaCallAuthenticationPackage を使用する必要があります。
LsaApLogonUser が成功すると、ログオン セッションが作成されます。 また、新しくログオンしたユーザーを表すトークンの作成に使用される情報も返されます。
構文
LSA_AP_LOGON_USER LsaApLogonUser;
NTSTATUS LsaApLogonUser(
[in] PLSA_CLIENT_REQUEST ClientRequest,
[in] SECURITY_LOGON_TYPE LogonType,
[in] PVOID AuthenticationInformation,
[in] PVOID ClientAuthenticationBase,
[in] ULONG AuthenticationInformationLength,
[out] PVOID *ProfileBuffer,
[out] PULONG ProfileBufferLength,
[out] PLUID LogonId,
[out] PNTSTATUS SubStatus,
[out] PLSA_TOKEN_INFORMATION_TYPE TokenInformationType,
[out] PVOID *TokenInformation,
[out] PLSA_UNICODE_STRING *AccountName,
[out] PLSA_UNICODE_STRING *AuthenticatingAuthority
)
{...}
パラメーター
[in] ClientRequest
LSA クライアントの要求を表す不透明な LSA_CLIENT_REQUEST バッファーへのポインター。 メモリを割 り当てる か解放する必要があるクライアント プロセスを識別するために、認証パッケージでこの値を AllocateClientBuffer と FreeClientBuffer に渡すことができます。
[in] LogonType
要求されたログオンの種類を識別する SECURITY_LOGON_TYPE 値。
[in] AuthenticationInformation
認証パッケージに固有の認証情報を提供します。 LSA は、このバッファーを解放します。 これは、 LsaLogonUser に渡されるのと同じ入力バッファーです。
[in] ClientAuthenticationBase
クライアント プロセス内の認証情報のアドレスを提供します。 これは、 AuthenticationInformation バッファー内のポインターを再マップするために必要な場合があります。
[in] AuthenticationInformationLength
AuthenticationInformation バッファーの長さをバイト単位で示します。
[out] ProfileBuffer
クライアント プロセスでプロファイル バッファーのアドレスを受け取るポインター。 認証パッケージは、 AllocateClientBuffer 関数を呼び出すことによって、クライアント プロセス内で ProfileBuffer バッファーを割り当 てます。 ただし、その後 LSA でログオンの成功を妨げるエラーが発生した場合、LSA はこのバッファーを解放します。
このバッファーの内容は、認証パッケージによって決まります。 LSA では、このバッファーは変更されません。 LsaLogonUser 関数に値を返すだけです。
[out] ProfileBufferLength
ProfileBuffer バッファーの長さをバイト単位で受け取る ULONG へのポインター。
[out] LogonId
このログオン セッションを一意に識別する新しいログオン ID を受け取る LUID へのポインター。 認証パッケージは、この LUID の割り当てと、このログオンのログオン セッションの作成を担当します。
[out] SubStatus
アカウント制限が原因でエラーの理由を受け取る NTSTATUS へのポインター。 SubStatus で返される値は、認証パッケージによって決まります。
次の表に、MSV1_0および Kerberos 認証パッケージの SubStatus 値を示します。
NTSTATUS コードの詳細については、プラットフォーム SDK に付属の Subauth.h ヘッダー ファイルを参照してください。
LsaNtStatusToWinError 関数は、NTSTATUS コードを Windows エラー コードに変換します。
[out] TokenInformationType
作成するトークンに含めるために返される情報の種類を示す LSA_TOKEN_INFORMATION_TYPE 値のアドレスを受け取るポインター。 情報は TokenInformation バッファーで返されます。
[out] TokenInformation
トークンに含める情報を受け取るポインター。 TokenInformation バッファーの形式と内容は、TokenInformationType パラメーターによって示されます。 認証パッケージは、 TokenInformation によって使用されるメモリを割り当てる役割を担います。ただし、このメモリは LSA によって解放されます。
[out] AccountName
ユーザー アカウントの名前を受け取る LSA_UNICODE_STRING 構造体へのポインター。 AccountName は、呼び出しの成功または失敗に関係なく、常に返される必要があります。その文字列は、認証試行の監査レコードに含まれます。 認証パッケージは、 AccountName によって使用されるメモリを割り当てる役割を担います。ただし、このメモリは LSA によって解放されます。
[out] AuthenticatingAuthority
任意。 ログオン の認証 機関の説明を受け取るLSA_UNICODE_STRING構造体へのポインター。 このパラメーターは NULL である可能性があります。 この文字列は、認証試行の監査レコードに含まれています。 認証パッケージは、 AuthenticatingAuthority によって使用されるメモリを割り当てる役割を担います。ただし、このメモリは LSA によって解放されます。
MSV1_0認証パッケージは、アカウントを検証しているドメインのドメイン名を返します。 Kerberos 認証パッケージは、NetBIOS ドメイン名を返します。
戻り値
関数が成功した場合は、STATUS_SUCCESSを返す必要があります。
関数が失敗した場合は、NTSTATUS エラー コードを返す必要があります。エラー コードは、次の値のいずれか、または LSA ポリシー関数の戻り値のいずれかになります。
リターン コード | 説明 |
---|---|
|
クライアントのメモリ クォータが戻りバッファーを割り当てるのに不十分であるため、ログオンを完了できませんでした。 |
|
認証要求を処理するために使用できるドメイン コントローラーはありません。 |
|
ログインに失敗しました。 エラーの理由が指定されていません。一般的な理由としては、ユーザー名とパスワードのスペルが間違っています。 |
|
ユーザー アカウントとパスワードは正当なものでしたが、ユーザー アカウントの制限により、現時点ではログオンできません。 詳細については、 SubStatus パラメーターに関するページを参照してください。 |
|
指定された認証情報は、指定された認証パッケージでは認識されません。 |
呼び出し元のアプリケーションでは 、LsaNtStatusToWinError 関数を使用して、NTSTATUS コードを Windows エラー コードに変換できます。
解説
認証パッケージは、LsaApLogonUser、LsaApLogonUserEx、または LsaApLogonUserEx2 のいずれかの機能を実装する必要があります。
要件
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | ntsecpkg.h |