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 値を次に示します。

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

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 ポリシー関数の戻り値のいずれかになります。

リターン コード 説明
STATUS_NO_MEMORY
クライアントのメモリ クォータが戻りバッファーを割り当てるのに不十分であるため、ログオンを完了できませんでした。
STATUS_NO_LOGON_SERVERS
認証要求を処理するために使用できるドメイン コントローラーはありません。
STATUS_LOGON_FAILURE
ログインに失敗しました。 エラーの理由が指定されていません。一般的な理由としては、ユーザー名とパスワードのスペルが間違っています。
STATUS_ACCOUNT_RESTRICTION
ユーザー アカウントとパスワードは正当なものですが、ユーザー アカウントの制限により、現時点ではログオンが正常に行われなくなります。
STATUS_BAD_VALIDATION_CLASS
指定された認証情報は、認証パッケージによって認識されます。
 

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

注釈

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

C2 認定用に LsaApLogonUserEx が追加されました。 C2 は、米国政府によって定義されるセキュリティ分類です。

要件

要件 値
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー ntsecpkg.h

こちらもご覧ください

LSA_CLIENT_REQUEST

LSA_TOKEN_INFORMATION_TYPE

LSA_UNICODE_STRING

LsaApLogonUser

LsaApLogonUserEx2

LsaCallAuthenticationPackage