簡體   English   中英

獲取與桌面關聯的登錄Windows用戶名

[英]Get the logged in Windows user name associated with a desktop

我希望枚舉系統中的所有桌面並獲取該桌面的登錄用戶名。 到目前為止,我有以下代碼snippit作為獲取HDESK句柄並嘗試確定與其關聯的用戶名(如果有)的示例,但對LookupAccountSid的調用失敗,ERROR_NONE_MAPPED(“帳戶名和安全ID之間沒有映射是完成“)。

HDESK desk = OpenDesktop( "Default", 0, FALSE, READ_CONTROL | DESKTOP_READOBJECTS );

DWORD size = 4096;

SID * sid  = (SID *)malloc( size );

GetUserObjectInformation( desk , UOI_USER_SID, sid, size, &size );

char name[512], domain[512];
int namesz = 512, domainsz = 512;

LookupAccountSid( NULL, sid, &name, &namesz, &domain, &domainsz, &s);

這可能是因為我通過GetUserObjectInformation而不是用戶SID提取登錄SID。 如果可以,我可以將其轉換為登錄用戶SID?

任何人都可以指出我正確的方向來獲取任意桌面的登錄用戶名(通過它各自的HDESK或HNWD手柄,甚至是台式機的HWINSTA手柄)? 提前致謝。

如果你想要的是用戶信息,那么這將是有效的。

調用WTSEnumerateSessions以獲取WTS_SESSION_INFO結構的數組。 對於每個結構,將SessionId成員傳遞給WTSQuerySessionInformation,並將WTSInfoClass成員設置為WTSUserName。 這將為您提供與會話關聯的用戶名(如果有)。

或者,您可以將WTSInfoClass設置為WTSSessionInfo並返回WTSINFO結構。 這包含許多信息,包括用戶名和域。 雖然MSDN頁面錯誤,但請查看WTSINFO的頭文件定義。

您必須兩次調用WTSEnumerateSessions,一次獲取所需的緩沖區大小,然后一次獲取您的信息。

關系:一個或多個桌面對象位於Windows Station中。 Windows Station與會話關聯。

問題是桌面根本不與用戶相關聯。 嘗試使用psexec在SYSTEM帳戶下運行記事本。 它在您的桌面上運行在您的桌面上。 否則,你將無法看到它。

但是如果你想得到與窗口站關聯的會話,那么是的,這是可能的。 您需要使用ObjectNameInformation調用NtQueryObject來獲取對象的名稱。 例如,這是我得到的: \\Sessions\\1\\Windows\\WindowStations\\WinSta0 有你的會話ID。

正確的代碼對我有用:

TCHAR username[UNLEN + 1];
DWORD size = UNLEN + 1;
GetUserName((TCHAR*)username, &size);

我在Windows 7 x86上使用Visual Studio Express 2012

這不是解決方案,但是對站/桌面的良好描述。 來自http://www.microsoft.com/technet/security/bulletin/fq00-020.mspx

什么是Windows工作站? Windows工作站是一個安全的容器,包含剪貼板,一些全局信息和一組一個或多個桌面。 Windows 2000會話將具有多個Windows工作站,一個分配給交互式用戶的登錄會話,另一個分配給Winlogon進程,安全屏幕保護程序以及在除交互式安全上下文之外的安全上下文中運行的任何服務用戶。 分配給交互式用戶的登錄會話的交互式窗口站還包含鍵盤,鼠標和顯示設備。 交互式窗口站對用戶可見,並且可以從用戶接收輸入。 所有其他窗口站都是非交互式的,這意味着它們不能對用戶可見,並且不能接收用戶輸入。

什么是桌面? 桌面是一個安全的容器對象,包含在一個窗口站中。 Windows工作站中可能包含許多桌面。 桌面具有邏輯顯示表面,包含窗口,菜單和掛鈎。 只能看到交互式窗口站的桌面並接收用戶輸入。 在交互式窗口工作站上,一次只有一個桌面處於活動狀態。 此活動桌面(也稱為輸入桌面)是用戶當前可見並接收用戶輸入的桌面。

您可以從%USERPROFILE%環境變量的末尾提取它

nbtstat曾經能夠從命令行執行此操作,具有計算機名稱或IP地址。 不過,我看了很長時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM