共用方式為


Msv1_0SubAuthenticationFilter函式 (subauth.h)

Msv1_0SubAuthenticationFilter函式會執行域控制器特定的使用者登入驗證。

函式會接收使用者登入數據,以及域控制器 安全性帳戶 管理員 (SAM) 資料庫中使用者找到的所有資訊。

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

語法

NTSTATUS Msv1_0SubAuthenticationFilter(
  [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
這是使用來賓帳戶進行登入的重試。

[in] UserAll

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

[out] WhichFields

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

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

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

[out] UserFlags

要從該函式 ProfileBuffer 參數中的 LsaLogonUser 函式傳回的值。 此參數可以是下列其中一個值。

意義
LOGON_GUEST
這是來賓登入。
LOGON_NOENCRYPTION
呼叫端未指定加密認證。
 
注意 依照慣例,子驗證套件只會以 UserFlags 參數的高序位元組傳回位。
 

[out] Authoritative

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

[out] LogoffTime

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

[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
密碼無效。
 

Msv1_0SubAuthenticationFilter 函式搭配 Kerberos 驗證套件使用時,如果函式呼叫傳回STATUS_SUCCESS,而且兩個參數 之一 LogoffTimeKickoffTime 有非零值,這個值會當做票證存留期使用。 另一方面,如果兩個參數的值都是非零值,則會使用這兩個值中的較小值。

如果用於票證存留期的值 (LogoffTimeKickoffTime) 的較快大於預設票證存留期,則該值將會當做票證的續約時間上限使用。 相反地,如果兩個值中的較大值 (LogoffTimeKickoffTime) 的較晚版本小於預設票證存留期,此值將會當做票證存留期使用。 如需詳細資訊,請參閱 Microsoft Kerberos

與 Kerberos 驗證套件搭配使用時,如果此函式傳回錯誤, 密鑰發佈中心 (KDC) 將會傳回 Kerberos 錯誤KDC_ERR_POLICY,狀態值會傳回為擴充錯誤碼。

備註

此函式的實作不應執行導致 輕量型目錄存取通訊協定 (LDAP) 流量的任何作業。 例如,請勿連線到 Active Directory 資料庫並查詢。

在MSV1_0或 Kerberos 驗證套件驗證登入之後, Msv1_0SubAuthenticationFilter 函式可以執行額外的驗證,以判斷使用者是否可以登入網路帳戶。 如果子驗證套件 DLL 在域控制器的登錄中正確註冊為 『Auth0』,則會呼叫此函式。 登錄路徑會根據函式是否位於MSV1_0或 Kerberos 子驗證套件 DLL 而有所不同。

此篩選例程可能會傳回STATUS_SUCCESS,這表示登入應該繼續,或失敗碼,這表示其他驗證失敗。

規格需求

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