как запретить завершение процесса обычным пользователем? - PullRequest
2 голосов
/ 26 июля 2011

Я не могу реализовать его в качестве службы Windows, потому что мой процесс должен взаимодействовать с рабочим столом, и это запрещено в Windows 7.

Какой самый простой способ сделать это?Начиная с другого (привилегированного) пользователя?Как это сделать?

Мои пользователи не хакеры, а просто операторы, поэтому некоторые «глупые» методы, такие как скрытие от диспетчера задач, тоже могут помочь.

РЕДАКТИРОВАТЬ: некоторые пояснения в соответствии с предоставленными ответами

мой процесс не имеет графического интерфейса, поэтому я стараюсь не убивать процесс из диспетчера задач

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

EDIT 2:

Могу ли я использовать службу Windows, которая запускает отдельный процесс в сеансе пользователя под системной учетной записью (поскольку моя служба работает под системной учетной записью)?может ли пользователь убить этот дочерний процесс?

Ответы [ 4 ]

2 голосов
/ 27 июля 2011

после долгого копания я нашел здесь приемлемый ответ: Предотвращение уничтожения пользовательского процесса с помощью "End Process" из Process Explorer

отлично работает, если вы вошли в систему как обычный пользователь, вы не можете убить процесс из Process Explorer. Администратор все еще может убить его, потому что имеет достаточные права. это именно то, что мне нужно

2 голосов
/ 26 июля 2011

Вы можете отключить диспетчер задач с помощью групповой политики и скрыть кнопку закрытия из окна своего приложения и реакции на [Alt + F4].

1 голос
/ 26 июля 2011

Из этого блога MSDN :


Вот как вы это делаете:

Получите токен пользователя, позвонив по номеру

WTSQueryUserToken (WTSGetActiveConsoleSessionId (), &hToken) ;     

Используйте этот токен в CreateProcessAsUser.


Вам просто нужно позвонить WTSQueryUserToken из вашего сервиса и запустить процесс - он работает и в Windows 7!

1 голос
/ 26 июля 2011

Закрытие (корневого) окна не означает остановку процесса - когда существует цикл прокачки сообщений, вы можете просто перезапустить его с новым окном (ясно, что если вы используете каркас, возможно, есть обертка вокруг этого) .

Но если пользователь владеет объектом Windows (например, процессом), он всегда может удалить (прекратить) его. Но при работе от имени другого пользователя учетные данные этого пользователя должны храниться так, чтобы это было доступно для программы запуска, работающей в качестве текущего пользователя.

Чтобы помочь более конкретно, я думаю, что мы должны понять, почему:

потому что мой процесс должен взаимодействовать с рабочим столом

является требованием.

...