Получите зарегистрированное имя пользователя Windows, связанное с рабочим столом

Я хочу перечислить все рабочие столы в системе и получить зарегистрированное имя пользователя для того рабочего стола. До сих пор у меня есть следующий отрывок кода как пример получения дескриптора HDESK и попытки определить имя пользователя, связанное с ним (если таковые имеются), но вызов к сбоям LookupAccountSid с ERROR_NONE_MAPPED ("Никакое отображение между именами учетной записи и идентификаторами безопасности был сделан").

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);

Это могло бы быть, потому что я вытаскиваю вход в систему SID через GetUserObjectInformation скорее затем пользователь SID. Раз так я могу преобразовать это в зарегистрированных пользователей SID?

Кто-либо может указать на меня в правильном направлении для получения зарегистрированного имени пользователя для произвольного рабочего стола (или через он - соответствующий HDESK или через дескриптор HNWD или даже станции рабочего стола дескриптор HWINSTA)?заранее спасибо.

7
задан QAZ 13 January 2010 в 22:38
поделиться

5 ответов

Если вам нужна информация о пользователе, то это сработает.

вызовите WTSEnumerateSessions для получения массива структур WTS_SESSION_INFO. для каждой структуры передайте член SessionId в WTSQuerySessionInformation с членом WTSInfoClass, установленным в WTSUserName. Это даст вам имя пользователя (если таковой имеется), связанного с сессией.

Альтернативно вы можете установить WTSInfoClass на WTSSessionInfo и получить обратно структуру WTSINFO. Она содержит много информации, включая имя пользователя и домен. Посмотрите на определение заголовочного файла WTSINFO, хотя, так как страница MSDN неправильная.

Вы должны вызвать WTSEnumerateSessions дважды, один раз, чтобы получить требуемый размер буфера, а затем один раз, чтобы получить информацию.

Отношения: Один или несколько объектов Рабочего стола находятся в Windows Station. Станция Windows связана с сеансом.

2
ответ дан 7 December 2019 в 14:33
поделиться

Проблема в том, что рабочие столы не связаны с пользователями вообще. Попробуйте использовать PSExec, чтобы запустить блокнот под учетной записью системы. Он работает на вашей окне, на вашем рабочем столе. В противном случае вы не сможете это увидеть.

Но если вы хотите получить сеанс, связанный с окном, то да, это возможно. Вам необходимо позвонить NTQueryObject с ObjectNameInformation, чтобы получить имя объекта. Например, вот что я получаю: \ Sessions \ 1 \ Windows \ windowstations \ Winsta0 . Есть ваш идентификатор сеанса.

2
ответ дан 7 December 2019 в 14:33
поделиться

Это не решение, но это хорошее описание станции / настольного компьютера. Из http://www.microsoft.com/technet/security/bulletin/fq00-020.mspx

Что такое станция Windows? Станция Windows - это безопасный контейнер, который содержит буфер обмена, какую-то глобальную информацию и набор одного или нескольких рабочих столов. Сессия Windows 2000 будет иметь несколько станций Windows, которые назначаются на сеанс входа в систему интерактивного пользователя, а другие, назначенные в процесс WinLogon, безопасный процесс заставки, и любой сервис, который запускается в контексте безопасности, отличном от имени интерактивного Пользователь. Интерактивная окна, назначенная на сеанс входа в систему интерактивного пользователя, также содержит устройство клавиатуры, мыши и отображения. Интерактивная окна отображается пользователю и может принимать вход от пользователя. Все остальные окно не являются неинтективными, что означает, что они не могут быть видны пользователю и не могут получать пользовательский ввод.

Что такое рабочий стол? Рабочий стол - это безопасный объект контейнера, который содержится в окно. Может быть много настольных компьютеров, содержащихся на станции Windows. Рабочий стол имеет логичную поверхность дисплея и содержит окна, меню и крючки. Только рабочие столы интерактивной окна могут быть видны и получать пользовательский ввод. На интерактивной окне активно активен только один рабочий стол. Этот активный рабочий стол, также известный как входной рабочий стол, является той, который в настоящее время виден пользователю, и это получает ввод пользователя.

0
ответ дан 7 December 2019 в 14:33
поделиться

Вы можете извлечь его с конца % UserProfile% переменной среды

0
ответ дан 7 December 2019 в 14:33
поделиться
Раньше

nbtstat мог делать это из командной строки, либо с именем машины, либо с IP-адресом. Давненько я на это не смотрел.

0
ответ дан 7 December 2019 в 14:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: