PLSA_AP_LOGON_USER_EX
コールバックシグネチャ
NTSTATUS PLSA_AP_LOGON_USER_EX(
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,
LSA_UNICODE_STRING** MachineName
);パラメーター
| フィールド | 型 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ClientRequest | void** | LSA クライアントの要求を表す、不透明な LSA_CLIENT_REQUEST データ型へのポインターです。 | ||||||||||
| LogonType | SECURITY_LOGON_TYPE | 試行されるログオンの種類を示す SECURITY_LOGON_TYPE 構造体です。 | ||||||||||
| AuthenticationInformation | void* | 認証パッケージ固有の認証情報を指定します。このバッファーは LSA が解放します。 | ||||||||||
| ClientAuthenticationBase | void* | クライアント プロセス内の認証情報のアドレスを指定します。AuthenticationInformation バッファー内のポインターを再マップするために必要になる場合があります。 | ||||||||||
| AuthenticationInformationLength | DWORD | AuthenticationInformation バッファーの長さを示します。 | ||||||||||
| ProfileBuffer | void** | クライアント プロセス内のプロファイル バッファーのアドレスを受け取るポインターです。認証パッケージは、 AllocateClientBuffer 関数を呼び出して、クライアント プロセス内に ProfileBuffer バッファーを割り当てる責任があります。ただし、その後 LSA がログオンの成功を妨げるエラーを検出した場合は、LSA がこのバッファーを解放します。 このバッファーの内容は認証パッケージによって決まります。LSA はこのバッファーを変更せず、その値を LsaLogonUser 関数に返すだけです。 | ||||||||||
| ProfileBufferLength | DWORD* | ProfileBuffer バッファーの長さ (バイト単位) を受け取る ULONG へのポインターです。 | ||||||||||
| LogonId | LUID* | このログオン セッションを一意に識別する新しいログオン ID を受け取る LUID 変数へのポインターです。認証パッケージは、この LUID を割り当て、このログオンに対する LSA ログオン セッションを作成する責任があります。 | ||||||||||
| SubStatus | INT* | アカウントの制限による失敗の理由を受け取る NTSTATUS へのポインターです。SubStatus に返される値は認証パッケージによって決まります。 次に示すのは、MSV1_0 および Kerberos 認証パッケージの SubStatus 値です。
NTSTATUS コードの詳細については、Platform SDK に付属する Subauth.h ヘッダー ファイルを参照してください。 | ||||||||||
| TokenInformationType | LSA_TOKEN_INFORMATION_TYPE* | 作成されるトークンに含めるために返される情報の種類を示す LSA_TOKEN_INFORMATION_TYPE 値のアドレスを受け取るポインターです。情報は TokenInformation パラメーターによって返されます。 | ||||||||||
| TokenInformation | void** | トークンに含める情報のアドレスを受け取るポインターです。TokenInformation の形式と内容は TokenInformationType パラメーターによって示されます。TokenInformation が使用するメモリの割り当ては認証パッケージの責任ですが、このメモリは LSA によって解放されます。 | ||||||||||
| AccountName | LSA_UNICODE_STRING** | ユーザー アカウントの名前を受け取る LSA_UNICODE_STRING 構造体へのポインターです。AccountName は、呼び出しの成否にかかわらず常に返す必要があります。その文字列は認証試行の監査レコードに含まれます。AccountName が使用するメモリの割り当ては認証パッケージの責任です。このメモリは LSA によって解放されます。 | ||||||||||
| AuthenticatingAuthority | LSA_UNICODE_STRING** | 省略可能です。ログオンの認証機関の説明を受け取る LSA_UNICODE_STRING 構造体へのポインターです。このパラメーターは NULL でもかまいません。この文字列は認証試行の監査レコードに含まれます。AuthenticatingAuthority が使用するメモリの割り当ては認証パッケージの責任ですが、このメモリは LSA によって解放されます。 MSV1_0 認証パッケージは、アカウントを検証したドメインのドメイン名を返します。Kerberos 認証パッケージは NetBIOS ドメイン名を返します。 | ||||||||||
| MachineName | LSA_UNICODE_STRING** | 省略可能です。クライアントのワークステーション名を格納する LSA_UNICODE_STRING 構造体のアドレスを受け取るポインターです。この情報は認証試行の監査レコードに含まれます。MachineName が使用するメモリの割り当ては認証パッケージの責任ですが、このメモリは LSA によって解放されます。 MSV1_0 認証パッケージは、クライアントのワークステーションの NetBIOS 名を返します。 |
公式ドキュメント
ユーザーのログオン資格情報を認証します。
この関数は、ユーザーの最初のログオンの場合にのみ ローカル セキュリティ機関 (LSA) から呼び出されます。以降の認証要求では LsaCallAuthenticationPackage を使用する必要があります。LsaApLogonUserEx が成功すると、ログオン セッションを作成し、新しくログオンしたユーザーを表すトークンの構築に使用される情報を返します。
この関数は、ログオン試行の監査レコードにコンピューター名が追加される点で LsaApLogonUser と異なります。
戻り値
関数が成功した場合は、STATUS_SUCCESS を返します。
それ以外の場合は、NTSTATUS エラー コードを返します。これには次の値、または LSA ポリシー関数の戻り値 のいずれかを指定できます。
| 戻り値 | 説明 |
|---|---|
| クライアントのメモリ クォータが不足しており、戻り値用のバッファーを割り当てられないため、ログオンを完了できませんでした。 | |
| 認証要求を処理できるドメイン コントローラーがありません。 | |
| ログオンの試行が失敗しました。失敗の理由は特定されません。一般的な原因としては、ユーザー名やパスワードの入力ミスなどがあります。 | |
| ユーザー アカウントとパスワードは正当ですが、ユーザー アカウントの制限により、現時点ではログオンに成功できません。 | |
| 指定された認証情報が認証パッケージによって認識されます。 |
呼び出し元のアプリケーションは、 LsaNtStatusToWinError 関数を使用して、NTSTATUS コードを Windows のエラー コードに変換できます。
解説(Remarks)
認証パッケージは、次の関数のいずれかを実装する必要があります。 LsaApLogonUser、LsaApLogonUserEx、または LsaApLogonUserEx2。
LsaApLogonUserEx は C2 認定のために追加されました。C2 は米国政府が定義したセキュリティ分類です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)