Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2009, 21:20   #1
sysyman
Пользователь Подтвердите свой е-майл
 
Аватар для sysyman
 
Регистрация: 04.07.2007
Сообщений: 75
По умолчанию

Здравствуйте. У меня вопрос все по тойже функции CreateProcessWithLogonW. С помощью нее прога запускается от имени другого пользователя как надо. Но есть проблема. В системе должен работать сервис и прога.Если прога вырублена то сервис это отслеживает и запускает ее под именем того пользователя под каким она работала, если конечно пользователь не закрыл свою сессию. Имя пользователя известно , но как узнать необходимый пароль для подстановки его в CreateProcessWithLogonW?
sysyman вне форума Ответить с цитированием
Старый 20.01.2009, 21:22   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Имя пользователья известно, пароль неизвестен. Что пишем? троян?
rpy3uH вне форума Ответить с цитированием
Старый 21.01.2009, 10:10   #3
sysyman
Пользователь Подтвердите свой е-майл
 
Аватар для sysyman
 
Регистрация: 04.07.2007
Сообщений: 75
По умолчанию

Да нет не троян. Прогу для ограничения деток по времени пользования за компом. Вобщем прога уже готова. Два процесса запускаются одновременно и следят друг за другом, вобщем не дают себя закрыть даже если закрывать дерево процессов.. Все работает, но столкнулся с небольшой проблемкой. Если пользователь нажмет выключение компа или завершение сессии , а в системе работает какая-либо прога с несохраненными данными, то мои 2 процесса где-то в 50% случаев вырубаются быстрее чем та с несохраненными данными. В результатае пользователь вырубил мои процессы и может спокойно продолжать свою работу. Пробывал ловить сообщения о окончании сессии и невозвращать его винде ,чтобы не были закрыты мои процессы, но в этом случае выскакивает окно что винда ждет ответа от моих процессов. Вобщем в результате решил прикрутит еще сервис,который бы дополнительно следил бы за моими процессами. Теперь у меня 2 варианта, или сервис с CreateProcessWithLogonW или наити способ чтобы в случае вырубания винды мои процессы выключались бы самими последними из всех запущенных процессов ,исключая конечно системные. Может поскажите что дельное?
sysyman вне форума Ответить с цитированием
Старый 21.01.2009, 10:44   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

в этих двух процессах при получени сообщения о закрытии смотри, есть ли какие любо другие процессы от этого пользователя, если таких нет и остались только основыные системные процессы работающие от SYSTEM, NETWORK SERVICE и LOCAL SERVIСE то закрывайся, если ещё есть процессы запущенные от этого пользователя, то жди когда они закроются (через WaitForSingleObject) и только потом завершайся.
rpy3uH вне форума Ответить с цитированием
Старый 21.01.2009, 11:40   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Можно попробовать с помощью SetProcessShutdownParameters установить приоритет при выключении для своей проги.
Каким образом проги следят друг за другом? Просто часто такую комбинацию можно завершить, если сначала остановить один процесс, потом завершить второй, а потом завершить первый.
Somebody вне форума Ответить с цитированием
Старый 21.01.2009, 21:37   #6
sysyman
Пользователь Подтвердите свой е-майл
 
Аватар для sysyman
 
Регистрация: 04.07.2007
Сообщений: 75
По умолчанию

Somebody огромное спасибо! Прописал при создании формы SetProcessShutdownParameters(1,SHUT DOWN_NORETRY); и весь вопрос решен. Провел небольшой опыт. Открыл 5 разных текстовых документов и внес в них изменения, а также переводчик сократ персональный 4, он почти все время закрывался последним. Сделал выключение компа.Система сразу давай спрашивать хотите ли вы сохранить и тп. Мои процессы закрылись самыми последним. Ксатати в этой функции есть еще другие флаги кроме SHUTDOWN_NORETRY, но что-то в инете за них нигде не слова. Не вкурсе для чего другие флаги?
Да, мои процессы можно закрыть таким способом как ты описал. Но чтобы так их закрыть, надо знать ,что такое поток и для чего он нужен и как его можно закрыть и с помощью чего. Как минимум нужен другой диспетчер задач . а не виндовый. К тому же для пользователей которые только и знают как нажимать кнопки в игре, я думаю пойдет. Хотя можно подумать чтобы в разных потоках одного процесса постоянно шла проверка , не остановлен ли второй поток, если остановлен, то перезагрузить сам себя. Вобшем следует порыться в информации о потоках.
Одно время искал информацию как заблокировать процесс от закрытия, чтобы выскакивало сообщение доступ запрешен. Перечитал много информации, кстати помню rpy3uH писал за ноль кольцо и тп., но понял что это не для меня , опыт не позволяет делать такие вещи и поэтому решил завязаться с двумя процессами.
sysyman вне форума Ответить с цитированием
Старый 22.01.2009, 08:25   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от sysyman Посмотреть сообщение
Ксатати в этой функции есть еще другие флаги кроме SHUTDOWN_NORETRY, но что-то в инете за них нигде не слова. Не вкурсе для чего другие флаги?
почитай сам SetProcessShutdownParameters, есть пока только один флаг
rpy3uH вне форума Ответить с цитированием
Старый 22.01.2009, 13:42   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от sysyman Посмотреть сообщение
Да, мои процессы можно закрыть таким способом как ты описал. Но чтобы так их закрыть, надо знать ,что такое поток и для чего он нужен и как его можно закрыть и с помощью чего. Как минимум нужен другой диспетчер задач . а не виндовый. К тому же для пользователей которые только и знают как нажимать кнопки в игре, я думаю пойдет.
Если пользователи узнают, что так можно, то обычной ArtMoney будет достаточно, чтобы почти одновременно остановить все потоки процесса.
P.S. Эксперимент показал, что если 2 потока выполняют в бесконечном цикле ResumeThread - 1-й для 2-го, 2-й для 1-го, то этого всё равно недостаточно, чтобы защитить потоки от остановки с помощью ArtMoney.

Последний раз редактировалось Somebody; 22.01.2009 в 13:52.
Somebody вне форума Ответить с цитированием
Старый 22.01.2009, 23:01   #9
sysyman
Пользователь Подтвердите свой е-майл
 
Аватар для sysyman
 
Регистрация: 04.07.2007
Сообщений: 75
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
почитай сам SetProcessShutdownParameters, есть пока только один флаг
Просто если вызвать помощника кода в делфе на месте флага в этой функции и набрать Sh, то можно кроме SHUTDOWN_NORETRY выбрать другие константы и все нормально компилируется , только что это дает, я не знаю.

Цитата:
Сообщение от Somebody Посмотреть сообщение
Если пользователи узнают, что так можно, то обычной ArtMoney будет достаточно, чтобы почти одновременно остановить все потоки процесса.
P.S. Эксперимент показал, что если 2 потока выполняют в бесконечном цикле ResumeThread - 1-й для 2-го, 2-й для 1-го, то этого всё равно недостаточно, чтобы защитить потоки от остановки с помощью ArtMoney.
Вот поэтому было бы неплохо прикрутить сервис с проверкой за работой нужных процессов. Его уж точно пользователь с ограниченными правами в системе не сможет убить, но все упирается в пароль пользователя для функции CreateProcessWithLogonW

Последний раз редактировалось rpy3uH; 23.01.2009 в 09:37.
sysyman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зарегистрировать сервис Terran Общие вопросы Delphi 7 19.03.2009 13:10
Регистрация сервиса Terran Общие вопросы Delphi 5 01.11.2008 18:15
Создание защищенного сервиса miae Общие вопросы Delphi 5 21.01.2008 18:54
Как запустить программу из сервиса Маркъ Общие вопросы Delphi 5 13.02.2007 00:29
как узнать путь запущенного сервиса Alar Общие вопросы Delphi 0 30.10.2006 11:18