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 值。
值 | 意義 |
---|---|
|
用戶帳戶有時間限制,目前無法用來登入。 |
|
用戶帳戶有工作站限制,無法用來從目前的工作站登入。 |
|
用戶帳戶密碼已過期。 |
|
用戶帳戶目前已停用,無法用來登入。 |
如需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 |
---|---|
|
無法完成登入,因為用戶端的記憶體配額不足以配置傳回緩衝區。 |
|
沒有域控制器可供服務驗證要求。 |
|
登入嘗試失敗。 未指定失敗的原因;一般原因包括拼錯的用戶名稱和密碼。 |
|
用戶帳戶和密碼是合法的,但用戶帳戶限制目前會防止登入成功。 |
|
驗證套件可辨識提供的驗證資訊。 |
呼叫應用程式可以使用 LsaNtStatusToWinError 函 式,將 NTSTATUS 程式代碼轉換成 Windows 錯誤碼。
備註
驗證套件必須實作下列其中一個函式: LsaApLogonUser、 LsaApLogonUserEx 或 LsaApLogonUserEx2。
已針對 C2 認證新增 LsaApLogonUserEx。 C2 是由 美國 政府定義的安全性分類。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | ntsecpkg.h |