次の方法で共有


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