user name currently logged in locally
От: GYB  
Дата: 18.04.02 12:43
Оценка:
Может кто-нибудь знает более менее стандартный способ получить имя пользователя, который в текущий момент залогинин на машине локально (процесс не обязательно в контексте этого пользователя) ? Причём желательно чтобы работало как в NT/2000/XP так и в Win9x/ME.

К слову: "Я решил эту задачу, но очень нетривиальным способом и с использованием имён, которые регистрирует Messenger Service, так что если его, к примеру, остановить, то работать не будет".
Re: user name currently logged in locally
От: Max_Akimov Россия  
Дата: 18.04.02 14:12
Оценка:
GetUserName подойдет?
Re: user name currently logged in locally
От: Alex Fedotov США  
Дата: 18.04.02 14:27
Оценка:
Здравствуйте GYB, Вы писали:

GYB>Может кто-нибудь знает более менее стандартный способ получить имя пользователя, который в текущий момент залогинин на машине локально (процесс не обязательно в контексте этого пользователя) ? Причём желательно чтобы работало как в NT/2000/XP так и в Win9x/ME.


GYB>К слову: "Я решил эту задачу, но очень нетривиальным способом и с использованием имён, которые регистрирует Messenger Service, так что если его, к примеру, остановить, то работать не будет".


http://www.rsdn.ru/forum/message.asp?mid=16694
Автор: yaroslav_v
Дата: 11.12.01
-- Alex Fedotov
Re[2]: user name currently logged in locally
От: Аноним  
Дата: 18.04.02 15:07
Оценка:
Здравствуйте Max_Akimov, Вы писали:

MA>GetUserName подойдет?


Нет
GetUserName возвращает имя пользователя текущего трида и если этот трид будет работать от имени системы, то он и вернёт имя системы "SYSTEM", а нужно имя пользователя локальной сессии.
Re[2]: user name currently logged in locally
От: Аноним  
Дата: 18.04.02 15:14
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>http://www.rsdn.ru/forum/message.asp?mid=16694
Автор: yaroslav_v
Дата: 11.12.01


Называется "Думали думали, но так ничего и не придумали :crash: ".
Re[3]: user name currently logged in locally
От: Alex Fedotov США  
Дата: 18.04.02 16:13
Оценка:
Здравствуйте Аноним, Вы писали:

AF>>http://www.rsdn.ru/forum/message.asp?mid=16694
Автор: yaroslav_v
Дата: 11.12.01


А>Называется "Думали думали, но так ничего и не придумали ".


Так дело в том, что, как правило, если возникает задача получить имя "локального" пользователя из службы, значит, что-то не так спроектировано. Не должно волновать службу, кто сейчас сидит за кнопками, ее должно волновать, кто к ней обращается, а локальный это пользователь или удаленный — не важно.
-- Alex Fedotov
Re[4]: user name currently logged in locally
От: GYB  
Дата: 19.04.02 12:18
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Так дело в том, что, как правило, если возникает задача получить имя "локального" пользователя из службы, значит, что-то не так спроектировано. Не должно волновать службу, кто сейчас сидит за кнопками, ее должно волновать, кто к ней обращается, а локальный это пользователь или удаленный — не важно.




Нет. Это совсем не так. Просто как всегда Microsoft не предоставляет интерфейсы ( или точнее сказать не документирует ) к некоторой, часто необходимой системной информации. Ведь очевидно, что информация эта в системе есть, но нет механизма просто получить к ней доступ.

И что значит не так спроектировано ? Знасит не по шаблону ? То есть захотелось чего-то большего, отличающегося от того, что приведено в примерах ?

Так это завсит от задачи в первую очередь, а не от того, что считать важным или не важным.
А задача стояла примерно такая: необходимо ограничить доступ пользователям в соответствии с расписанием. И в определённый момент нужно проверить не входит ли имя пользователя, работающего за компьютером, в список тех для кого истекло время доступа. И если истекло, то сделать для него logoff.

Вот и всё. И что здесь не так спроектировано ?
Re[5]: user name currently logged in locally
От: Alex Fedotov США  
Дата: 19.04.02 15:45
Оценка:
Здравствуйте GYB, Вы писали:

GYB>А задача стояла примерно такая: необходимо ограничить доступ пользователям в соответствии с расписанием. И в определённый момент нужно проверить не входит ли имя пользователя, работающего за компьютером, в список тех для кого истекло время доступа. И если истекло, то сделать для него logoff.


GYB>Вот и всё. И что здесь не так спроектировано ?


То что пользователей может быть несколько, например, работающих через terminal services.
-- Alex Fedotov
Re[6]: user name currently logged in locally
От: Alex Fedotov США  
Дата: 19.04.02 15:51
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

GYB>>А задача стояла примерно такая: необходимо ограничить доступ пользователям в соответствии с расписанием. И в определённый момент нужно проверить не входит ли имя пользователя, работающего за компьютером, в список тех для кого истекло время доступа. И если истекло, то сделать для него logoff.


GYB>>Вот и всё. И что здесь не так спроектировано ?


AF>То что пользователей может быть несколько, например, работающих через terminal services.


А решается задача созданием Winlogon notification package (Win2K/XP) или прослойки к MSGINA (NT4, смотри http://www.rsdn.ru/?article/?baseserv/extgina.xml
Автор(ы): Алексей Остапенко
Дата: 12.10.2001
В статье описывается возможная схема написания расширений стандартной реализации сервиса GINA
(Graphical Identification and Authentication) MSGINA.Dll. Приводится пример простейшего расширения, блокирующего
запуск скринсейвера, если запущено приложение из определенного списка.
). И тем и другим способом ты получишь извещения о моментах входа и выхода пользователей из системы. Определить, кто из них засиделся дольше времени — дело техники.

Кроме того, прослойка к MSGINA позволит сделать принудительный Logoff нужному пользователю. Фактически, отдельная служба здесь и не нужна, достаточно небольшой надстройки к MSGINA.
-- Alex Fedotov
Re[7]: user name currently logged in locally
От: GYB  
Дата: 19.04.02 17:28
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте Alex Fedotov, Вы писали:


AF>>То что пользователей может быть несколько, например, работающих через terminal services.


В моём случае это не важно. Нужно отлавливать только локальные сессии. Тем более, что нужно, чтобы это работало и под Win9x/ME. Terminal services на компьютере могут и не быть.



AF>А решается задача созданием Winlogon notification package (Win2K/XP) или прослойки к MSGINA (NT4, смотри http://www.rsdn.ru/?article/?baseserv/extgina.xml
Автор(ы): Алексей Остапенко
Дата: 12.10.2001
В статье описывается возможная схема написания расширений стандартной реализации сервиса GINA
(Graphical Identification and Authentication) MSGINA.Dll. Приводится пример простейшего расширения, блокирующего
запуск скринсейвера, если запущено приложение из определенного списка.
). И тем и другим способом ты получишь извещения о моментах входа и выхода пользователей из системы. Определить, кто из них засиделся дольше времени — дело техники.


Это вариант, но далеко не простой. Моё решение позволяет не держать процесс в памяти, а запускать его через sheduler. Да, как-то я не заострял внимание, что это не служба, а обычный процесс.



AF>Кроме того, прослойка к MSGINA позволит сделать принудительный Logoff нужному пользователю. Фактически, отдельная служба здесь и не нужна, достаточно небольшой надстройки к MSGINA.


Принудительный logoff тоже не проблемма.
Собственно основная проблемма была получить имя пользователя, и не по событию его входа, а именно в произвольный момент времени.



Я конечно искренне благодарен за такое внимание к моему скромному вопросу. Но похоже что стандартного и простого способа здесь нет.

Спасибо за советы. Будет над чем подумать, но уже наверно для других задач.
Re: user name currently logged in locally
От: gacov Россия  
Дата: 27.03.03 10:33
Оценка:
На сайте www.sysinternals.com есть исходник проги "PsLoggedOn" там имя пользователя находится через реестр в подключе HKEY_USERS\\... затем это имя преобразуется в SID и далее в простое имя — это самое простое

Еще можно открыть десктоп Winsta0\\default и по дескриптору защиты посмотреть какой пользователь зарегистрирован — это чуть посложнее
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.