LogonUserExA 函式 (winbase.h)
LogonUserEx 函式會嘗試將使用者登入本機電腦。 本機電腦是呼叫 LogonUserEx
語法
BOOL LogonUserExA(
[in] LPCSTR lpszUsername,
[in, optional] LPCSTR lpszDomain,
[in, optional] LPCSTR lpszPassword,
[in] DWORD dwLogonType,
[in] DWORD dwLogonProvider,
[out, optional] PHANDLE phToken,
[out, optional] PSID *ppLogonSid,
[out, optional] PVOID *ppProfileBuffer,
[out, optional] LPDWORD pdwProfileLength,
[out, optional] PQUOTA_LIMITS pQuotaLimits
);
參數
[in] lpszUsername
指定用戶名稱之 Null 終止字串的指標。 這是要登入的用戶帳戶名稱。 如果您使用 使用者主體名稱 (UPN) 格式,user@DNS_domain_name,lpszDomain 參數必須 NULL。
[in, optional] lpszDomain
null 終止字串的指標,指定帳戶資料庫包含 lpszUsername 帳戶之網域或伺服器的名稱。 如果此參數 NULL,則必須以 UPN 格式指定使用者名稱。 如果此參數為 “.”,函式只會使用本機帳戶資料庫來驗證帳戶。
[in, optional] lpszPassword
null 終止字串的指標,指定 lpszUsername所指定使用者帳戶的純文本密碼。 當您完成使用密碼時,請呼叫 SecureZeroMemory 函式,從記憶體清除密碼。 如需保護密碼的詳細資訊,請參閱 處理密碼。
[in] dwLogonType
要執行的登入作業類型。 此參數可以是下列其中一個值。
價值 | 意義 |
---|---|
|
此登入類型適用於批次伺服器,其中進程可能會代表用戶執行,而不需要直接介入。 此類型也適用於一次處理許多純文本驗證嘗試的高效能伺服器,例如郵件或網頁伺服器。 LogonUserEx 函式不會快取此登入類型的認證。 |
|
此登入類型適用於會以互動方式使用計算機的使用者,例如 終端機 伺服器、遠端殼層或類似程式登入的使用者。 此登入類型有快取已中斷連線作業之登入資訊的額外費用;因此,某些用戶端/伺服器應用程式不合適,例如郵件伺服器。 |
|
此登入類型適用於高效能伺服器,以驗證純文本密碼。 LogonUserEx 函式不會快取此登入類型的認證。 |
|
此登入類型會在 驗證套件中保留名稱和密碼,這可讓伺服器在模擬用戶端時連線到其他網路伺服器。 伺服器可以接受來自用戶端的純文本認證、呼叫 LogonUserEx、確認使用者可以透過網路存取系統,並且仍與其他伺服器通訊。 |
|
此登入類型可讓呼叫端複製其目前的令牌,並指定輸出連線的新認證。 新的登入會話具有相同的本機標識符,但會針對其他網路連線使用不同的認證。
只有LOGON32_PROVIDER_WINNT50登入提供者才支援此登入類型。 |
|
表示服務類型的登入。 提供的帳戶必須啟用服務許可權。 |
|
此登入類型適用於 GINA DLL,這些 DLL 會以互動方式登入計算機的使用者。 此登入類型可以產生唯一的稽核記錄,顯示工作站解除鎖定時。 |
[in] dwLogonProvider
登入提供者。 此參數可以是下列其中一個值。
價值 | 意義 |
---|---|
|
使用系統的標準登入提供者。 默認 安全性提供者 為NTLM。 |
|
使用交涉登入提供者。 |
|
使用 NTLM 登入提供者。 |
[out, optional] phToken
句柄變數的指標,接收代表指定之使用者的令牌句柄。
您可以在呼叫 impersonateLoggedOnUser 函式時,使用傳回的句柄。
在大部分情況下,傳回的句柄是 主要令牌,可用於呼叫 createProcessAsUser 函式。 不過,如果您指定LOGON32_LOGON_NETWORK旗標,LogonUserEx 會傳回 模擬令牌,除非您呼叫 DuplicateTokenEx,將模擬令牌轉換成主要令牌,否則您無法 CreateProcessAsUser。
當您不再需要此句柄時,請呼叫 CloseHandle 函式加以關閉。
[out, optional] ppLogonSid
接收使用者登入之 SID 之 安全性識別碼 (SID) 之指標的指標。
當您完成使用 SID 時,請呼叫 LocalFree 函式來釋放它。
[out, optional] ppProfileBuffer
指標,接收包含已登入使用者配置檔之緩衝區位址的指標。
[out, optional] pdwProfileLength
接收配置檔緩衝區長度的 DWORD 指標。
[out, optional] pQuotaLimits
QUOTA_LIMITS 結構的指標,可接收已登入使用者配額的相關信息。
傳回值
如果函式成功,函式會傳回非零。
如果函式失敗,則會傳回零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
言論
LOGON32_LOGON_NETWORK登入類型最快,但有下列限制:
- 函式會傳回 模擬令牌,而不是主要令牌。 您無法直接在 createProcessAsUser 函式
使用此令牌。 不過,您可以呼叫 DuplicateTokenEx 函式,將令牌轉換成主要令牌,然後在 createProcessAsUser使用它。 - 如果您將令牌轉換成主要令牌,並在 createProcessAsUser
使用它來啟動進程,則新進程無法透過重新導向器存取其他網路資源,例如遠端伺服器或印表機。 例外狀況是,如果網路資源不受訪問控制,則新進程將能夠存取它。
除非您登入 Passport 帳戶,否則此函式不需要SE_TCB_NAME許可權。
lpszUsername 所指定的帳戶必須具有必要的帳戶許可權。 例如,若要以LOGON32_LOGON_INTERACTIVE旗標登入使用者,使用者(或使用者所屬的群組)必須擁有SE_INTERACTIVE_LOGON_NAME帳戶許可權。 如需影響各種登入作業的帳戶許可權清單,請參閱 Account 物件存取權限。
如果至少有一個令牌存在,則會將用戶視為登入。 如果您呼叫 CreateProcessAsUser,然後關閉令牌,使用者仍會登入,直到進程(和所有子進程)都結束為止。
如果 LogonUserEx 呼叫成功,系統會透過呼叫提供者的 NPLogonNotify 進入點函式來通知網路提供者登入。
注意
winbase.h 標頭會將 LogonUserEx 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
支援的最低伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | winbase.h (包括 Windows.h) |
連結庫 | Advapi32.lib |
DLL | Advapi32.dll |