Tôi muốn liệt kê tất cả các máy tính để bàn trong một hệ thống và nhận tên người dùng đã đăng nhập cho máy tính đó. Cho đến nay tôi có đoạn mã sau đây như là một ví dụ về việc có được xử lý HDESK và cố gắng xác định tên người dùng liên kết với nó (nếu có), nhưng cuộc gọi đến LookupAccountSid không thành công với ERROR_NONE_MAPPED ("Không có ánh xạ giữa tên tài khoản và ID bảo mật làm xong").Nhận tên người dùng Windows đã đăng nhập được kết hợp với máy tính để bàn
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);
Có thể là do tôi đang lấy SID đăng nhập thông qua GetUserObjectInformation chứ không phải SID người dùng. Nếu vậy tôi có thể chuyển đổi nó thành SID người dùng đã đăng nhập?
Có ai có thể chỉ cho tôi đúng hướng để nhận tên người dùng đã đăng nhập cho máy tính để bàn tùy ý hay không (thông qua bộ xử lý HDESK hoặc HNWD tương ứng hoặc ngay cả trạm của máy tính để bàn HWINSTA)? cảm ơn trước.
Cảm ơn, gợi ý tốt nhưng sau khi thử nó. trong khi tôi có thể liệt kê các phiên và tên người dùng liên quan của họ (nếu có) tên trạm của phiên là tên phiên RDP không phải là tên trạm cửa sổ (xem định nghĩa WTSWinStationName trong http://msdn.microsoft.com/en-us/library/ aa383861% 28VS.85% 29.aspx). Nếu tôi có thể liên kết một ID phiên tới một trạm cửa sổ, mặc dù kỹ thuật này sẽ là hoàn hảo, nhưng tôi không thể tìm thấy làm thế nào để làm như vậy. – QAZ
@QAZ không hoạt động mỗi phiên có một cửa sổ winsta0 là trạm cửa sổ có tất cả các widnows hiển thị (cửa sổ duy nhất khác quan tâm là deaktop an toàn cho phiên đó). – Joshua