Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1283258748
Igor_M
2010-08-31 16:45
2010.11.28
TCPClient и TCPServer


6-1229960991
Zlodeyz
2008-12-22 18:49
2010.11.28
Помогите создать Dial Up соединение


15-1282111749
TStas
2010-08-18 10:09
2010.11.28
Дельфи выдаю AV во адресу... dcc32.dll


15-1282508985
Юрий
2010-08-23 00:29
2010.11.28
С днем рождения ! 23 августа 2010 понедельник


2-1283434549
worldmen
2010-09-02 17:35
2010.11.28
Показ видео в клиент-серверном приложении





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский