Форум: "Начинающим";
Текущий архив: 2010.11.28;
Скачать: [xml.tar.bz2];
ВнизВзаимодействие сервиса с клавиатурой Найти похожие ветки
← →
Alexandro (2010-09-05 01:41) [0]Здравствуйте ! Пишу сервис, который должен по нажатию определенного сочетания клавиш выполнять некоторые действия. Проблема в том, что классическое решение в виде дополнительной программы, работающей в пользовательском режиме с RegisterHotKey не подходит так как срабатывание должно происходить и при отсутствии залогиненного пользователя. Насколько я понял из MSDN, SERVICE_INTERACTIVE_PROCESS не желательно использовать в Windows Vista и выше. Да и достаточно NoInteractiveServices поставить в не ноль, чтобы отключить этот флаг.
Вопрос: Как сделать так, чтобы сервис реагировал на заданное сочетание клавиш не зависимо от наличия залогиненных пользователей ?
← →
Eraser © (2010-09-05 02:37) [1]> Насколько я понял из MSDN, SERVICE_INTERACTIVE_PROCESS не
> желательно использовать в Windows Vista и выше
не то чтобы не желательно, там просто этот флаг не имеет никакой силы.
> Взаимодействие сервиса с клавиатурой
задумка изначально ошибочная.
← →
Leonid Troyanovsky © (2010-09-05 10:01) [2]
> Alexandro (05.09.10 01:41)
> Вопрос: Как сделать так, чтобы сервис реагировал на заданное
> сочетание клавиш не зависимо от наличия залогиненных пользователей
А кто же клаву топтать будет, если юзеров не будет в наличии?
Поручать обработку ввода надо клиенту, запустить который можно
хоть в автозагрузке.
See also: http://rsdn.ru/?forum/delphi/2187439.aspx
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2010-09-05 10:47) [3]
> Пишу сервис, который должен по нажатию определенного сочетания
> клавиш выполнять некоторые действия.
Это уже не сервис.
> так как срабатывание должно происходить и при отсутствии
> залогиненного пользователя
И кто же тогда будет нажимать клавиши?
← →
Плохиш © (2010-09-05 15:22) [4]Малъчико хочет тырить пароли...
← →
Anatoly Podgoretsky © (2010-09-05 16:01) [5]> Плохиш (05.09.2010 15:22:04) [4]
Проказник.
← →
Alexandro (2010-09-05 19:11) [6]
> Eraser © (05.09.10 02:37) [1]
> задумка изначально ошибочная.
Ну, другого способа реализации я пока не вижу - задача из серии boss-key по приходу нежелательных гостей уничтожить необходимую информацию в реестре всех пользователей компьютера. Доступ к реестрам всех пользователей возможен только с правами администратора или из сервиса.
А пользователи, которые будут эту комбинацию нажимать таковыми правами не обладают.
> Leonid Troyanovsky © (05.09.10 10:01) [2]
> А кто
> же клаву топтать будет, если юзеров не будет в наличии?Поручать
> обработку ввода надо клиенту, запустить который можнохоть
> в автозагрузке.
Ситуация: компьютер загружен - висит экран выбора пользователя. Залогиненные пользователей нет, физически человек у компьютера есть. Клиент пользовательского режима не загружен еще, а обработать нажатие нужно. Соответственно нажимать комбинацию будет человек когда залогиненного пользователя нет. Процесс входа пользователя занимает время, которого может не быть.
> Anatoly Podgoretsky © (05.09.10 10:47) [3]
> Это уже не сервис.
Давайте опустим слово "сервис" - задача описана в данном сообщении выше. Если есть другое решение с удовольствие выслушаю.
> Плохиш © (05.09.10 15:22) [4]
> Малъчико хочет тырить пароли...
"Благородный дон телепат ?" (С) Ketmar
<OFFTOP>
p.s. Мне залогинется с голубым значком, чтобы на вопрос попробовали ответить ? :))) Извините, пароля не помню своего - три года как не заходил.
p.p.s. Анатолий, Вы не изменились :)
</OFFTOP>
← →
Anatoly Podgoretsky © (2010-09-05 19:33) [7]> Alexandro (05.09.2010 19:11:06) [6]
Ну у пользователей прав нет, а у тебя есть? Вот ты и нажмешь и кирдык.
Решение в общем то неверное, такое решается через разрушение винчестера,
скажем взрыв пакет и волшебная кнопка (физическая) или сервер в Зимбабве.
← →
DVM © (2010-09-05 19:40) [8]
> Alexandro (05.09.10 19:11) [6]
Драйвер тебе поможет точно. Пусть твоя служба с драйвером и общается.
← →
Alexandro (2010-09-05 20:14) [9]
> Anatoly Podgoretsky © (05.09.10 19:33) [7]
> > Alexandro (05.09.2010 19:11:06) [6]Ну у пользователей
> прав нет, а у тебя есть? Вот ты и нажмешь и кирдык.
Я не могу стоять у каждого компа круглые сутки и не хочу ;)
> Решение в общем то неверное, такое решается через разрушение
> винчестера, скажем взрыв пакет и волшебная кнопка (физическая)
> или сервер в Зимбабве.
Заграничная терминалка там не прокатит - под такое количество пользователей с их задачами - нужен уже хороший кластер и толстый интернет-канал с обеих концов. Локальные-то сервера как раз защищены запалами. И физическая кнопка есть - она же кстати, стартует по сети сообщение, которое тоже ловит сервис и делает тоже самое. Удаление же данных с компьютера пользователя все равно делать придется - пусть даже это будут записи о терминальном доступе.
> DVM © (05.09.10 19:40) [8]
> > Alexandro (05.09.10 19:11) [6]Драйвер тебе поможет точно.
> Пусть твоя служба с драйвером и общается.
Да написал уже драйвер-фильтр - запнулся на 64 битной семерке, будь она не неладна... Думал есть другое решение, но похоже, что нет.
← →
Eraser © (2010-09-05 20:18) [10]> [6] Alexandro (05.09.10 19:11)
> Ну, другого способа реализации я пока не вижу
способ известный, в каждой терм. сесии иметь по запущеной копии процесса, взаимодействующего с сервисом.
> задача из серии boss-key по приходу нежелательных гостей
> уничтожить необходимую информацию в реестре всех
спасёт только что-то вроде этого http://www.eraser.ru/
← →
Eraser © (2010-09-05 20:20) [11]> [6] Alexandro (05.09.10 19:11)
> Залогиненные пользователей нет
есть - system.
← →
Игорь Шевченко © (2010-09-05 20:21) [12]
> по приходу нежелательных гостей уничтожить необходимую информацию
> в реестре всех пользователей компьютера.
может быть, ее там просто не хранить ?
← →
DVM © (2010-09-05 20:22) [13]
> Alexandro (05.09.10 20:14) [9]
> запнулся на 64 битной семерке, будь она не неладна...
Подпись драйвера что ли требует?
← →
Rouse_ © (2010-09-05 20:59) [14]
> DVM © (05.09.10 19:40) [8]
> Драйвер тебе поможет точно. Пусть твоя служба с драйвером
> и общается.
Боюсь не поможет, помимо клавиатуры есть и терминальный режим.
ИМХ надо развить идею. Если есть затык с программной стороны - ее нужно решать аппаратно.
В качестве сочетания клавиш - педаль под стол, активизирующая небольшой заряд С4 на харде, быстро, надежно и квалификации программиста не нужно.
← →
Alexandro (2010-09-05 22:00) [15]
> Eraser © (05.09.10 20:18) [10]
> способ известный, в каждой терм. сесии иметь по запущеной
> копии процесса, взаимодействующего с сервисом.
Это да. Но это уже обсуждалось тут дважды и выяснилось, что это решение, увы, непригодно.
> спасёт только что-то вроде этого http://www.eraser.ru/
А ноутбуки ? А SSD ? :)
> Игорь Шевченко © (05.09.10 20:21) [12]
> может быть, ее там просто не хранить ?
Игорь, я обязательно задам этот философский вопрос клиенту ;)
> DVM © (05.09.10 20:22) [13]
> Подпись драйвера что ли требует?
Ее самую. Приходится работать в "тестовом режиме", что на мой взгляд - не кошерно.
> Rouse_ © (05.09.10 20:59) [14]
> Боюсь не поможет, помимо клавиатуры есть и терминальный режим.
Речь идет о клиентских АРМ. В сервере, как я уже сказал, стоит оборудование для физического уничтожение дисков.
> В качестве сочетания клавиш - педаль под стол, активизирующая
> небольшой заряд С4 на харде, быстро, надежно и квалификации
> программиста не нужно.
Лучше всего было бы небольшую атомную бомбу, но никак не могу достать плутоний ;)
← →
Rouse_ © (2010-09-05 22:12) [16]Если с плутонием напряг - то поможет хранение данных в удаленном хранилище - сразу убиваешь две проблемы
1. данные для удаления, клиент не имеет
2. но зато они есть у тебя :)
← →
Alexandro (2010-09-05 22:20) [17]
> Rouse_ © (05.09.10 22:12) [16]
Не хватит интернет канала для удаленного хранилища, а если "удаленно" - это в офисе под навесным потолком, то с таким же успехом можно поставить на ресепшн ;) Кроме того, остаются следы от использования, которые тоже надо прибивать.
← →
Almaz © (2010-09-05 22:32) [18]<OFFTOP>
Я вернулся во плоти :) Кто-то мой аккаунт удалил - пришлось заного регистрироваться...
</OFFTOP>
← →
Rouse_ © (2010-09-05 23:18) [19]Чей-то тогда задачу понять не могу, сервер есть, канал к нему есть - как так получается что канал маленький?
Ели ты по нему будешь секретных данных сохранять по несколько гектаров, то тогда да, маловат, но и при удалении с харда такая операция не на много быстрее проталкивания по инету будет, гектар с харда стереть - это не байт в NTFS поправить, типа стерт он, а реально тройным наложением по секторам в несколько проходов проходить придется, иначе как шредер изобразить-то?
← →
Rouse_ © (2010-09-05 23:20) [20]ЗЫ: про удаленно - это я про машину где уже стоит оборудование для селфдестракта, есесн :)
← →
Rouse_ © (2010-09-05 23:25) [21]Да и в конце концов, если ты дровину реализовал уже - так подпиши ее и всего делов. Там денех, то копейки под это дело...
← →
Almaz © (2010-09-05 23:38) [22]Проблема в том, чтобы не столько удалить инфу на сервере - это крайний случай. А удалить все упоминания о сервере на локальных компах - пути к 1С базам, например. Оставить только пути к "белому" серверу. Так как взрывать сервер при каждом подозрении - несколько накладно ;) А это программа для "лайт" варианта. Когда сервер остается - так как найти его довольно сложно ;)
← →
Игорь Шевченко © (2010-09-05 23:46) [23]
> Игорь, я обязательно задам этот философский вопрос клиенту
> ;)
Непременно стоит задать. Так как я честно не понимаю, почему, если что-то именно нужно уничтожать (в реестре, да еще с его параноидальной системой поддержки целостности, с точками восстановления), то почему это нельзя просто не хранить. Тогда и уничтожать нечего...
← →
Almaz © (2010-09-06 00:33) [24]
> Игорь Шевченко © (05.09.10 23:46) [23]
Если не хранить - то работа сильно затрудниться - а в ряде случаев станет вообще невозможной. Как не хранить в реестре, например, пути к 1С базам коих штук 25 на пользователя ? (аутсорсинговая компания)
Терминалку пока сделать не получается - слишком много пользователей, работающих одновременно с ресурсоемкими приложениями (более 200) - нужен слишком мощный сервер, скорее даже кластер.
← →
Eraser © (2010-09-06 00:52) [25]> [15] Alexandro (05.09.10 22:00)
> Это да. Но это уже обсуждалось тут дважды и выяснилось,
> что это решение, увы, непригодно.
только вот я из этого обсуждения не понял, почему же оно не пригодно, в чём проблема там?
← →
Almaz © (2010-09-06 01:41) [26]
> только вот я из этого обсуждения не понял, почему же оно
> не пригодно, в чём проблема там?
Дано: компьютер, в "экране приветствия".
Вопрос: как запустить процесс, взаимодействующий с сервисом, чтобы он обрабатывал нажатия, пока компьютер в этом состоянии ?
Насколько я понимаю - никак.
← →
Eraser © (2010-09-06 02:02) [27]> [26] Almaz © (06.09.10 01:41)
> Насколько я понимаю - никак.
еще как можно ;-)
просто запускайте процесс в текущей терм. сессии, но с токеном системы и всех делов то.
← →
Almaz © (2010-09-06 09:51) [28]
> Eraser © (06.09.10 02:02) [27]
> > [26] Almaz © (06.09.10 01:41)> Насколько я понимаю -
> никак.еще как можно ;-)просто запускайте процесс в текущей
> терм. сессии, но с токеном системы и всех делов то.
Извините, наверно туплю - можно поподробнее способ запуска ?
← →
Eraser © (2010-09-06 12:02) [29]
stSystemUserSession: // Текущая терминальная сессия с правами системы.
begin
try
if not OpenProcessToken(GetCurrentProcess,
TOKEN_QUERY or TOKEN_DUPLICATE or TOKEN_ASSIGN_PRIMARY, hToken) then
begin
AppendLog("Error #9 @" + IntToStr(GetLastError));
Exit;
end;
if not DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, nil,
SecurityIdentification, TokenPrimary, hNewToken) then
begin
AppendLog("Error #10 @" + IntToStr(GetLastError));
Exit;
end;
if not SetTokenInformation(hNewToken,
TokenSessionId, @SessionId, SizeOf(Cardinal)) then
begin
AppendLog("Error #11 @" + IntToStr(GetLastError));
Exit;
end;
// Запуск процесса.
si.lpDesktop := "WinSta0\Default";
if CreateProcessAsUserW(hNewToken, PWideChar(APath), nil,
nil, nil, false, 0, nil, nil, si, pi) then
begin
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.11.28;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.005 c