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