Win32 API 日本語リファレンス
ホーム › Security.Authentication.Identity › PLSA_AP_LOGON_USER

PLSA_AP_LOGON_USER

コールバック

シグネチャ

NTSTATUS PLSA_AP_LOGON_USER(
    void** ClientRequest,
    SECURITY_LOGON_TYPE LogonType,
    void* AuthenticationInformation,
    void* ClientAuthenticationBase,
    DWORD AuthenticationInformationLength,
    void** ProfileBuffer,
    DWORD* ProfileBufferLength,
    LUID* LogonId,
    INT* SubStatus,
    LSA_TOKEN_INFORMATION_TYPE* TokenInformationType,
    void** TokenInformation,
    LSA_UNICODE_STRING** AccountName,
    LSA_UNICODE_STRING** AuthenticatingAuthority
);

パラメーター

フィールド型説明
ClientRequestvoid**LSA クライアントの要求を表す、不透明な LSA_CLIENT_REQUEST バッファーへのポインターです。認証パッケージはこの値を AllocateClientBuffer および FreeClientBuffer に渡すことで、メモリーを割り当てる、または解放するクライアントプロセスを識別できます。
LogonTypeSECURITY_LOGON_TYPE要求されたログオンの種類を示す SECURITY_LOGON_TYPE 値です。
AuthenticationInformationvoid*認証パッケージ固有の認証情報を指定します。このバッファーは LSA が解放します。これは LsaLogonUser に渡されたものと同じ入力バッファーです。
ClientAuthenticationBasevoid*クライアントプロセス内における認証情報のアドレスを指定します。AuthenticationInformation バッファー内のポインターを再マップするために必要になる場合があります。
AuthenticationInformationLengthDWORDAuthenticationInformation バッファーの長さをバイト単位で示します。
ProfileBuffervoid**

クライアントプロセス内のプロファイルバッファーのアドレスを受け取るポインターです。認証パッケージは、 AllocateClientBuffer 関数を呼び出して、クライアントプロセス内に ProfileBuffer バッファーを割り当てる責任があります。ただし、その後に LSA がログオンの成功を妨げるエラーを検出した場合、LSA はこのバッファーを解放します。

このバッファーの内容は認証パッケージによって決まります。LSA はこのバッファーを変更せず、その値をそのまま LsaLogonUser 関数に返します。

ProfileBufferLengthDWORD*ProfileBuffer バッファーの長さをバイト単位で受け取る ULONG へのポインターです。
LogonIdLUID*このログオンセッションを一意に識別する新しいログオン ID を受け取る LUID へのポインターです。認証パッケージは、この LUID を割り当て、このログオンのためのログオンセッションを作成する責任があります。
SubStatusINT*

アカウント制限による失敗の理由を受け取る NTSTATUS へのポインターです。SubStatus に返される値は、認証パッケージによって決まります。

次の表に、MSV1_0 および Kerberos 認証パッケージの SubStatus 値を示します。

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

NTSTATUS コードの詳細については、Platform SDK に付属する Subauth.h ヘッダーファイルを参照してください。

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

TokenInformationTypeLSA_TOKEN_INFORMATION_TYPE*作成されるトークンに含めるために返される情報の種類を示す LSA_TOKEN_INFORMATION_TYPE 値のアドレスを受け取るポインターです。この情報は TokenInformation バッファーに返されます。
TokenInformationvoid**トークンに含める情報を受け取るポインターです。TokenInformation バッファーの形式と内容は、TokenInformationType パラメーターによって示されます。TokenInformation が使用するメモリーの割り当ては認証パッケージが行いますが、このメモリーは LSA によって解放されます。
AccountNameLSA_UNICODE_STRING**ユーザーアカウントの名前を受け取る LSA_UNICODE_STRING 構造体へのポインターです。AccountName は、呼び出しの成否にかかわらず常に返す必要があります。この文字列は、認証試行の監査レコードに含まれます。AccountName が使用するメモリーの割り当ては認証パッケージが行いますが、このメモリーは LSA によって解放されます。
AuthenticatingAuthorityLSA_UNICODE_STRING**

省略可能です。ログオンの認証機関の説明を受け取る LSA_UNICODE_STRING 構造体へのポインターです。このパラメーターは NULL でもかまいません。この文字列は、認証試行の監査レコードに含まれます。AuthenticatingAuthority が使用するメモリーの割り当ては認証パッケージが行いますが、このメモリーは LSA によって解放されます。

MSV1_0 認証パッケージは、アカウントを検証したドメインのドメイン名を返します。Kerberos 認証パッケージは、NetBIOS ドメイン名を返します。

公式ドキュメント

ユーザーのログオン資格情報を認証します。

この関数は、ユーザーの最初のログオンのときにのみ呼び出されます。以降の認証要求では LsaCallAuthenticationPackage を使用する必要があります。

LsaApLogonUser が成功すると、ログオンセッションが作成されます。また、新しくログオンしたユーザーを表すトークンを構築するために使用される情報も返します。

戻り値

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

関数が失敗した場合は、NTSTATUS エラーコードを返します。これは次のいずれかの値、または LSA ポリシー関数の戻り値 のいずれかです。

戻り値 説明
STATUS_NO_MEMORY
クライアントのメモリークォータが不足しており、戻り用のバッファーを割り当てられないため、ログオンを完了できませんでした。
STATUS_NO_LOGON_SERVERS
認証要求を処理できるドメインコントローラーがありません。
STATUS_LOGON_FAILURE
ログオンの試行に失敗しました。失敗の理由は特定されません。一般的な原因としては、ユーザー名やパスワードの入力ミスなどがあります。
STATUS_ACCOUNT_RESTRICTION
ユーザーアカウントとパスワードは正当でしたが、ユーザーアカウントの制限により現時点ではログオンできません。詳細については、SubStatus パラメーターを参照してください。
STATUS_BAD_VALIDATION_CLASS
指定された認証パッケージでは、提供された認証情報が認識されません。

呼び出し元のアプリケーションは、 LsaNtStatusToWinError 関数を使用して、NTSTATUS コードを Windows エラーコードに変換できます。

解説(Remarks)

認証パッケージは、次の関数のいずれかを実装する必要があります: LsaApLogonUser、 LsaApLogonUserEx、または LsaApLogonUserEx2。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)