共用方式為


Msv1_0SubAuthenticationRoutine函式 (subauth.h)

Msv1_0SubAuthenticationRoutine函式會執行用戶端/伺服器特定的驗證。

安全性主體認證和安全性帳戶管理員 (SAM) 資料庫的資訊會傳遞至此函式以進行驗證。

此函式是由自定義子驗證套件 DLL 實作,可與MSV1_0驗證套件搭配使用。

只有在帳戶所在的驗證伺服器上,才會針對非互動式驗證呼叫Msv1_0SubAuthenticationRoutine函式,而且只有在登錄中的正確機碼下註冊子驗證 DLL 時才呼叫。

注意 Kerberos 驗證套件不會呼叫此例程。
 

語法

NTSTATUS Msv1_0SubAuthenticationRoutine(
  [in]  NETLOGON_LOGON_INFO_CLASS LogonLevel,
  [in]  PVOID                     LogonInformation,
  [in]  ULONG                     Flags,
  [in]  PUSER_ALL_INFORMATION     UserAll,
  [out] PULONG                    WhichFields,
  [out] PULONG                    UserFlags,
  [out] PBOOLEAN                  Authoritative,
  [out] PLARGE_INTEGER            LogoffTime,
  [out] PLARGE_INTEGER            KickoffTime
);

參數

[in] LogonLevel

指定 LogonInformation 參數中提供的資訊層級。 此參數通常會設定為 NetlogonInteractiveInformation。

[in] LogonInformation

NETLOGON_LOGON_IDENTITY_INFO 結構的指標。 此結構的成員包含登入之使用者的相關信息。 忽略這個 結構的 LogonDomainName 成員。

[in] Flags

選擇性。 包含描述登入情況的旗標。 此參數可以是下列其中一個值。

意義
MSV1_0_PASSTHRU
傳遞驗證。 使用者未連線到這部電腦。
MSV1_0_GUEST_LOGON
這是使用 GUEST 使用者帳戶進行登入的重試。

[in] UserAll

USER_ALL_INFORMATION 結構的指標,其中包含從 SAM 資料庫傳回的使用者描述。

[out] WhichFields

傳回需要寫回 SAM 資料庫 之USER_ALL_INFORMATION 結構的成員。 只有在 Msv1_0SubAuthenticationRoutine 將成功傳回給呼叫者時,才會寫入這些成員。 只有下列值有效。

意義
USER_ALL_PARAMETERS
UserAll 結構之 Parameters 成員中包含的數據寫回 SAM 資料庫。

如果 Parameters 成員UNICODE_STRING緩衝區的大小已變更, Msv1_0SubAuthenticationRoutine 必須使用 MIDL_user_free 函式刪除緩衝區,並使用 MIDL_user_allocate 函式重新配置緩衝區。

[out] UserFlags

LsaLogonUser 函式的 ProfileBuffer 參數包含 MSV1_0_LM20_LOGON_PROFILE 結構時,要傳回的值。 目前已針對結構的 UserFlags 成員定義下列值。

意義
LOGON_GUEST
這是來賓登入。
LOGON_NOENCRYPTION
呼叫端未指定加密認證。
 
注意 依照慣例,子驗證套件只會傳回 UserFlags高序位元組中的位;不過,不會強制執行此慣例。
 

[out] Authoritative

布爾值的指標,指出傳回的狀態是否為應該傳回給原始呼叫端的授權狀態。 如果傳回的值是 FALSE,則可以在另一個域控制器上再次嘗試登入要求。 不論函數調用的傳回值為何,此參數都應該傳回有效的資訊。

[out] LogoffTime

值的指標,接收使用者應該註銷系統的時間。 這次用來控制登入存留期,並指定為 GMT 相對系統時間。

[out] KickoffTime

值的指標,接收使用者應該註銷系統的時間。 這次用來控制登入存留期,並指定為 GMT 相對系統時間。 如果使用者不登出,請指定大正值,例如:

KickoffTime->HighPart = 0x7FFFFFFF;
KickoffTime->LowPart = 0xFFFFFFFF;

傳回值

此函式必須傳回下列其中一個值。

傳回碼 Description
STATUS_SUCCESS
沒有錯誤。
STATUS_ACCOUNT_DISABLED
帳戶已停用。
STATUS_ACCOUNT_EXPIRED
帳戶已過期。
STATUS_ACCOUNT_LOCKED_OUT
帳戶已經鎖定。
STATUS_INVALID_INFO_CLASS
LogonLevel 無效。
STATUS_INVALID_LOGON_HOURS
使用者目前未獲授權登入。
STATUS_INVALID_WORKSTATION
使用者未獲授權登入指定的工作站。
STATUS_NO_SUCH_USER
指定的用戶沒有帳戶。
STATUS_PASSWORD_EXPIRED
密碼已過期。
STATUS_PASSWORD_MUST_CHANGE
帳戶會標示為表示密碼必須在下一次登入時變更。
STATUS_WRONG_PASSWORD
密碼無效。

備註

如果 AuthenticationInformation 參數的一部分指出要完成子驗證,而且導出 Msv1_0SubAuthenticationRoutine 函式的子驗證 DLL 已在工作站上正確註冊,則MSV1_0驗證套件會呼叫此函式。

MSV1_0驗證套件不支援互動式登錄的子驗證,這需要 MSV1_0_INTERACTIVE_LOGON 結構。 需要 MSV1_0_LM20_LOGON 結構的網路登錄可以使用子驗證。

在找到正確的域控制器之後,就會呼叫 Msv1_0SubAuthenticationRoutine 函式,而且已從 SAM 資料庫擷取要驗證之安全性主體的所有資訊。 使用子驗證時,驗證是子驗證 DLL 的責任,必須由該 DLL 匯出 的Msv1_0SubAuthenticationRoutine 函式來完成。

規格需求

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