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

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
LogonId 參數中選取此登入會話的登入識別碼 (,) 已經存在。
STATUS_NETLOGON_NOT_STARTED
需要 SAM 資料庫或 Netlogon 服務,但無法使用。
STATUS_NO_MEMORY
用戶端的虛擬記憶體或分頁檔配額不足以配置傳回緩衝區。
 

呼叫應用程式可以使用 LsaNtStatusToWinError 函 式,將 NTSTATUS 程式碼轉換成 Windows 錯誤碼。

備註

驗證套件必須實作下列其中一個函式: LsaApLogonUserLsaApLogonUserExLsaApLogonUserEx2

需求

   
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
目標平台 Windows
標頭 ntsecpkg.h

另請參閱

LSA_CLIENT_REQUEST

LSA_TOKEN_INFORMATION_TYPE

LSA_UNICODE_STRING

LsaApLogonUser

LsaApLogonUserEx

LsaCallAuthenticationPackage