Share via


LSA_AP_LOGON_USER_EX2 コールバック関数 (ntsecpkg.h)

ユーザーの初回ログオン時のユーザー ログオン試行を認証するために使用されます。 ユーザーに対して新しいログオン セッションが確立され、ユーザーの検証情報が返されます。

構文

LSA_AP_LOGON_USER_EX2 LsaApLogonUserEx2;

NTSTATUS LsaApLogonUserEx2(
  [in]  PLSA_CLIENT_REQUEST ClientRequest,
  [in]  SECURITY_LOGON_TYPE LogonType,
  [in]  PVOID ProtocolSubmitBuffer,
  [in]  PVOID ClientBufferBase,
  [in]  ULONG SubmitBufferSize,
  [out] PVOID *ProfileBuffer,
  [out] PULONG ProfileBufferSize,
  [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,
  [out] PSECPKG_PRIMARY_CRED PrimaryCredentials,
  [out] PSECPKG_SUPPLEMENTAL_CRED_ARRAY *SupplementalCredentials
)
{...}

パラメーター

[in] ClientRequest

クライアントの要求を表す LSA_CLIENT_REQUEST 不透明なバッファーへのポインター。

[in] LogonType

ログオン種類を識別する値をSECURITY_LOGON_TYPEします。

[in] ProtocolSubmitBuffer

認証パッケージに固有の認証情報を提供するバッファー。

[in] ClientBufferBase

認証情報が常駐していたクライアント プロセス内のアドレスを提供するバッファー。 これは、認証情報バッファー内のポインターを修正するために必要な場合があります。

[in] SubmitBufferSize

認証情報バッファーのサイズをバイト単位で示す ULONG 値。

[out] ProfileBuffer

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

このバッファーの内容は、認証パッケージによって決定されます。 LSA では、このバッファーは変更されません。 LsaLogonUser 関数に値を返すだけです。

[out] ProfileBufferSize

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 ヘッダー ファイルを参照してください。

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

[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

任意。 クライアントのコンピューターの名前を含む UNICODE_STRING 構造体のアドレスを受け取るポインター。 必要に応じて、この文字列を省略できます。 この文字列は、この認証試行の監査レコードに含まれています。 認証パッケージは、 MachineName によって使用されるメモリを割り当てる役割を担います。ただし、このメモリは LSA によって解放されます。

MSV1_0認証パッケージは、クライアントのワークステーションの NetBIOS 名を返します。

[out] PrimaryCredentials

他のパッケージに渡すプライマリ資格情報を返す SECPKG_PRIMARY_CRED 構造体へのポインター。

[out] SupplementalCredentials

他のパッケージの補足資格情報の SECPKG_SUPPLEMENTAL_CRED_ARRAY 配列へのポインター。

戻り値

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

それ以外の場合は、NTSTATUS エラー コードを返す必要があります。エラー コードは、次の値のいずれか、または LSA ポリシー関数の戻り値のいずれかになります。

リターン コード 説明
STATUS_QUOTA_EXCEEDED
クライアントのメモリ クォータがリターン バッファーを割り当てるのに不十分であるため、ログオンを完了できませんでした。
STATUS_NO_LOGON_SERVERS
認証要求を処理するために使用できるドメイン コントローラーはありません。
STATUS_LOGON_FAILURE
ログインに失敗しました。 エラーの理由が指定されていません。一般的な理由には、スペルミスのあるユーザー名とパスワードが含まれます。
STATUS_ACCOUNT_RESTRICTION
ユーザー アカウントとパスワードは正当なものでしたが、ユーザー アカウントの制限により、現時点でログオンが正常に行われなくなります。 詳細については、 SubStatus パラメーターに関するページを参照してください。
STATUS_BAD_VALIDATION_CLASS
指定された認証情報は、認証パッケージによって認識されません。
STATUS_INVALID_LOGON_TYPE
LogonType が無効でした。
STATUS_LOGON_SESSION_COLLISION
このログオン セッションに対して選択されたログオン ID ( LogonId パラメーター内) は既に存在します。
STATUS_NETLOGON_NOT_STARTED
SAM データベースまたは Netlogon サービスは必要ですが、使用できません。
STATUS_NO_MEMORY
クライアントの仮想メモリまたはページファイルのクォータは、リターン バッファーを割り当てるには不十分です。
 

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

解説

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

要件

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

関連項目

LSA_CLIENT_REQUEST

LSA_TOKEN_INFORMATION_TYPE

LSA_UNICODE_STRING

LsaApLogonUser

LsaApLogonUserEx

LsaCallAuthenticationPackage