Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: CL | DM;

Вниз

Сервисы и Windows XP   Найти похожие ветки 

 
Андрей2   (2004-04-24 19:23) [0]

А как узнать имя активного пользователя из программы, запущенной от имени пользователя SYSTEM (от имени службы)? Функция GetUserName выдаёт значение SYSTEM.


 
Игорь Шевченко ©   (2004-04-24 19:25) [1]


> А как узнать имя активного пользователя


Нет такого понятия.


 
Андрей2   (2004-04-24 19:39) [2]

В операционной системе Windows XP появилась такая возможность как Быстрая смена пользователей. В любой момент времени в систему может войти любое (теоритически) количество пользователей. Но вот как из моего Сервиса, написанного на Delphi (6) узнать имя АКТИВНОГО пользователя? (он-то ВСЕГДА один)


 
Cobalt ©   (2004-04-24 20:15) [3]

Андрей2   (24.04.04 19:39) [2]
Вы, товарисч, видимо, ни разу не пользовались удалённым подключением.
Я как-то на работе на одном компе вошёл локально, и ещё с другого компа удалённо. И в обоих сеансах работали проги, копировали файлы. и я это видел вживую на двух мониках. И это было на Win2K.
Как отличить - какой сенанс активный?
Копайте в сторону WinStation (кажется), вам - на MSDN. Там будет ссылочка под названием "Overview". Вот по ней и читайте, авось найдёте то, что вам нужно.


 
Андрей2   (2004-04-24 20:51) [4]

Вы меня, наверное неправильно поняли. Мне однажды пришлось воспользоваться утилитой Windows XP под именем "Подключение к удалённому рабочему столу". Было соединено 2 компьютера. Вошёл я под одним именем и хотел чтобы с другого, соединённого компьютера, можно было войти вторично в систему с другого компьютера и видеть рабочий стол другого пользователя на экране соединённого компьютера. И что вы думаете? Появилось сообщение: "Пользователь с именем "Пользователь 2" хочет соединиться с данным компьютером. Разрешить или запретить?" (типо такого). Я выбрал "Разрешить". И Windows XP выкинул меня в экран приветствия, а удалённый компьютер получил удалённый рабочий стол. Я опять зашёл в систему с локального компьютера и тогда удалённый компьютер сказал примерно так: "Связь с удалённым рабочим столом прервана". Я сделал вывод о том что Рабочий стол в данный момент времени может принадлежать одному и только одному из пользователей, а значит и активный пользователь, работающий на данном компьютере тоже может быть только один. И всё-таки, как получить имя активного пользователя, рабочий стол которого в данный момент на экране? (сам Handle этого рабочего стола я всё-таки смог определить, а имя этого пользователя...)


 
Игорь Шевченко ©   (2004-04-24 20:54) [5]


> узнать имя АКТИВНОГО пользователя?


Если имеется в виду пользователь, подключенный к локальной оконной станции, то может быть поможет

WTSGetActiveConsoleSessionId + WTSQueryUserToken ?


 
Андрей2   (2004-04-25 08:42) [6]

Может быть и подойдёт. Но вот только как этими функциями (процедурами) пользоваться? (как их вызывать и что им в качестве параметров передавать)


 
Polevi ©   (2004-04-25 09:39) [7]

ты хелп бы посмотрел сперва для приличия что ли

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/termserv/termserv/wtsgetactiveconsolesessionid.asp

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/termserv/termserv/wtsqueryusertoken.asp


 
Андрей2   (2004-04-26 13:56) [8]

А ва, для приличия, повежливее были бы! Ну посмотрел я MSDN, но почему-то функция WTSGetActiveConsoleSessionId в любых случаях возвращает 0. Я её вызывал и из kernel32.dll (отладчик Delphi говорит, что она имеется там), и из WTSApi.dll (хотя этой функции там нет) - никакой разницы! Что прикажете делать?


 
Андрей2   (2004-04-26 13:58) [9]

А Вы, Polevi, для приличия, повежливее были бы! Ну посмотрел я MSDN, но почему-то функция WTSGetActiveConsoleSessionId в любых случаях возвращает 0. Я её вызывал и из kernel32.dll (отладчик Delphi говорит, что она имеется там), и из WTSApi.dll (хотя этой функции там нет) - никакой разницы! Что прикажете делать?


 
Polevi ©   (2004-04-26 14:18) [10]

> Что прикажете делать?
застрелиться


 
Андрей2   (2004-04-26 14:24) [11]

Я пока ещё жить хочу! Вы, пожалуйста по теме что-нибудь посоветуйте!


 
VMcL ©   (2004-04-26 14:34) [12]

>>Андрей2  (26.04.04 14:24) [11]

Голова и глаза тебе, чтобы наушники и шапку носить?

WTSGetActiveConsoleSessionId

Return Values

The session identifier of the session attached to the console. If there is no session attached to the console, (for example, if the console session is in the process of being attached or detached), this function returns 0xFFFFFFFF.


 
Андрей2   (2004-04-26 18:45) [13]

Вы, VMcL, я так понимаю текст Return Values из MSDN сюда перекатали. И я там был, мёд-пиво пил... но ничего не помогало. Я вот думаю может-быть есть какая-либо альтернатива функции WTSGetActiveConsoleSessionId? А может (может-быть) есть функция, которая напрямую выдаст имя пользователя активной ОКОННОЙ сессии? (хотя вряд-ли такая есть). Но биться все равно будем! Какие у Вас, члены форума, есть ещё предложения (только не типо таких как застрелиться, а ПО ДЕЛУ)?


 
Андрей2   (2004-04-26 20:31) [14]

Что-то Вы замолчали. Или уснули. Или у Вас кончились предложения? Помогите мне пожалуйста!


 
sniknik ©   (2004-04-26 23:25) [15]

зачем? чтобы ты и ту добрую душу обложил? направление тебе дали, двигайся! хотя бы для того чтобы понять что тебе не это нужно а чтото другое.


 
Anatoly Podgoretsky ©   (2004-04-27 09:23) [16]

Выпий пива, забудь проблемы.


 
Игорь Шевченко ©   (2004-04-27 10:19) [17]

Читаем MSDN, топик "Microsoft Windows XP Fast User Switching: Design Guide for Building Business Applications"

"System Services Interaction
From a programmatic standpoint, several cases need to be addressed:

The server process receives a direct request from a client process.
In this case, the message is probably transmitted via LPC or RPC. In either case, there are APIs to get the client token. Use WTSQueryUserToken. Once the client token is obtained, the server can call advapi32!CreateProcessAsUser. This brings up the process on the correct window station, assuming that the client user token has a session tag, which it should.

The server process receives some form of notification and needs to display the User Interface (UI) in the current user"s context.
The server must get the current user"s token. The service then must duplicate the token into the server process (client process relative to TS) for the given session identifier, which the server process can give to TS. In this case, the server process must be running as SYSTEM.

The server process receives some form of notification and needs to display the UI, but it doesn"t have to be in the current user"s context.
In this case, the server process can duplicate its primary process token and change the session identifier to the current session identifier. The current session identifier can be obtained by using WTSGetActiveConsoleSessionID. "


 
Андрей2   (2004-04-27 15:51) [18]

Чего-то я MSDN не понимаю. Либо задачка слишком сложная передо мной встала, либо я тупой... А Вы кроме MSDN-а почему-то предложить ничего не можете... Я уже задумался над тем, что вызов функции WTS не так оформляю. Тогда хоть в этом мне помогите - напишите как правильно вызывать! (только прежде чем писать ответ на своём опыте убедитесь - выполните этот вызов сами, и в случае успеха ВЫКЛАДЫВАЙТЕ!)


 
Игорь Шевченко ©   (2004-04-27 16:12) [19]


> Тогда хоть в этом мне помогите - напишите как правильно
> вызывать! (только прежде чем писать ответ на своём опыте
> убедитесь - выполните этот вызов сами, и в случае успеха
> ВЫКЛАДЫВАЙТЕ!)


Уважаемый, а с какой радости я должен решать Вашу проблему ? У нас договор о технической поддержке ?


 
VMcL ©   (2004-04-27 16:48) [20]

>>Андрей2  (27.04.04 15:51) [18]

Тебе сюда: http://tinyurl.com/2rhyz


 
Burd   (2004-05-06 20:50) [21]

Игорю Шевченко:
А Вам ведь правильное замечание сделали: не знаете - зачем писать? Я над этой проблемой бьюсь третий день, а красивых решений еще не видел. Я пробовал работать с терминальными функциями, (правда не с этой, такими как WTSEnumerateSessions, WTSQuerySessionInformation и получал ошибку - запускающая програма не есть приложением Windows или MS-DOS - сервис (другими словами служба) все таки. И что прикажете делать. Умничать я тоже умею - не дурак, а сделать не могу.


 
Игорь Шевченко ©   (2004-05-06 21:31) [22]

Burd   (06.05.04 20:50)

А я, собственно говоря, помочь пытался - вот, в MSDN топик нашел, даже не поленился, процитировал. Может, эта информация может чем-то помочь? Вроде как в MSDN специально написан этот путь, для того, чтобы сервис мог узнать учетную запись активного пользователя...

Что-то не так ?



Страницы: 1 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
1-1086110483
T2
2004-06-01 21:21
2004.06.13
Варианты


6-1082526541
atruhin
2004-04-21 09:49
2004.06.13
Перехват на контроллере домена. События входа пользователя.


1-1085694456
GEN++
2004-05-28 01:47
2004.06.13
DLL обмен строками


3-1084888677
Cyber
2004-05-18 17:57
2004.06.13
Как сохранить изменения таблиц


1-1086114084
Дана
2004-06-01 22:21
2004.06.13
Изменение размера bitmapa при resize формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский