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

ULONG 的指標,接收 ProfileBuffer 緩衝區的長度,以位元組為單位。

[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頭檔。

[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 原則函數傳回值

傳回碼 Description
STATUS_NO_MEMORY
無法完成登入,因為用戶端的記憶體配額不足以配置傳回緩衝區。
STATUS_NO_LOGON_SERVERS
沒有域控制器可供服務驗證要求。
STATUS_LOGON_FAILURE
登入嘗試失敗。 未指定失敗的原因;一般原因包括拼錯的用戶名稱和密碼。
STATUS_ACCOUNT_RESTRICTION
用戶帳戶和密碼是合法的,但用戶帳戶限制目前會防止登入成功。
STATUS_BAD_VALIDATION_CLASS
驗證套件可辨識提供的驗證資訊。
 

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

備註

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

已針對 C2 認證新增 LsaApLogonUserEx。 C2 是由 美國 政府定義的安全性分類。

規格需求

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

另請參閱

LSA_CLIENT_REQUEST

LSA_TOKEN_INFORMATION_TYPE

LSA_UNICODE_STRING

LsaApLogonUser

LsaApLogonUserEx2

LsaCallAuthenticationPackage