MarshalS Ответов: 1

Как найти имя пользователя из идентификатора сеанса?


У меня есть пользовательское приложение win32 . Это перечисляет все детали процесса вместе с ProcessId. Мне нужно напечатать имя пользователя вместе с идентификатором сеанса. SessionID перечисляется с помощью метода ProcessIdToSessionId (). Я хочу напечатать имя пользователя соответствующего SessionID. Это приложение специально разработано для WindowsXP, поэтому API должен поддерживать WindowsXP. Если кто-то знает решение, Пожалуйста, поделитесь им.

Что я уже пробовал:

DWORD dwSessionId, dwPid,dwErr;
char* Uname;
ProcessIdToSessionId(dwPid, & amp; dwSessionId);

1 Ответов

Рейтинг:
2

Jochen Arndt

Почему вы хотите использовать идентификатор сеанса, когда у вас есть идентификатор процесса? Используйте это, чтобы получить имя пользователя.

Использование идентификатора процесса, возвращаемого ProcessIdToSessionId возможно, это не сработает, как уже упоминалось в моем предыдущем ответе Код C++ для печати всего процесса с идентификатором сеанса[^]:

Цитата:
Замечания
Если вызывающий процесс не выполняется в среде служб терминалов, то значение, возвращаемое в pSessionId, равно нулю
Вышеизложенное взято из старого SDK и применимо к версиям Windows вплоть до XP. Предполагая, что вы не выполняете свое приложение XP в терминальной службе, идентификатор сеанса всегда будет равен нулю.

Чтобы получить имя из идентификатора процесса, обратитесь к этим функциям (или к веб-коду, например):
Функция OpenProcessToken (Windows)[^]
Функция GetTokenInformation (Windows)[^] (с классами TokenOwner получает имя пользователя SID)
Функция LookupAccountSid (Windows)[^]