Re: Logoff current user in Windows NT

From
Victor ()
To
All
Date
2001-06-07T21:05:24Z
Area
SU.WINDOWS.NT.PROG
From: "Victor" <VictorK@mastereye.com>


"Alex Fedotov" <alexf@3cube.com> wrote in message
news:9fmkdd$nq2$1@host.talk.ru...
> Demid wrote:
>
> > Дано:
> > Нужно написать Windows NT Service, который, кроме всего прочего, мог бы
> > разлоговывать пользователя, сидящего за консолью. Не перегружая при этом
> > машину.
> > Поковырявшись в MSDN придумал следующий алгоритм:
> >
> > 1. Service создает новый процесс;
> > 2. Процесс ищет Window Station текущего пользователя на консоли;
> > 3. Процесс присоединяется к найденной Window Station, выполняет
> >     AdjustTokenPrivileges и ExitWindowsEx с соответствующими
параметрами.
>
> Я бы тут делал наоборот. Сервис запускает процесс, сразу присоединенный к
> нужной станции, указывая имя станции и десктопа в поле lpDesktop структуры
> STARTUPINFO при создании процесса. Искать ничего не надо, поскольку
> интерактивная станция всегда winsta0, а десктоп пользователя всегда
default.
> Кроме того, ты должен запустить процесс от имени того пользователя,
которого
> собираешься log off. Рекомендую почитать вот эту статью про запуск
процессов
> от имени другого пользователя:
> http://msdn.microsoft.com/library/periodic/period00/logon.htm
>

Отдельный процесс это лишний геморрой, можно сделать проще прямо из сервиса:
- сохраняешь текущую станцию и десктоп;
- открываешь WinSta0 и устанавливаешь, как текущую станцию для процесса;
- открываешь Default десктоп и вызываешь SetThreadDesktop;
- вызываешь ExitWindowsEx
- восстанавливаешь первоначальный десктоп и станцию;

и все в полном ажуре! Да, незабудь для сервиса подогнать привилегию
SE_SHUTDOWN_NAME.

При таком подходе тебе не надо знать ни имя пользователя, ни его пароль :-))

Успехов!



--- ifmail v.2.15dev5
 * Origin: EUnet AG, Switzerland. A KPNQwest Company. (2:5020/400)