Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват системных вызовов, Хочу перехватывать запускаемые программы 
:(
    Опции темы
DeviceIK
Дата 6.12.2006, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.12.2006

Репутация: нет
Всего: нет



Сабж, собственно. Делал так под OpenBSD (там в модуль ядра библиотека записывалась), а теперь вот под винду понадобилось. В частности, надо перехватить открываемый winword.exe или, если он уже открыт - перехватить и обработать открываемый в нем файл.
PM MAIL   Вверх
mr.DUDA
Дата 7.12.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



DeviceIK, я уже в соседнем топике ответил: на .NET эту задачу решить нельзя. Можно натыкать кучу [DllImport] винапишных функций, но проще тот же код написать на C++/WinAPI.


--------------------
user posted image
PM MAIL WWW   Вверх
DeviceIK
Дата 7.12.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.12.2006

Репутация: нет
Всего: нет



 Re: Как перехватить вызов winword.exe или файл?   [new]    
      Process[] ProcWord=Process.GetProcessesByName("WINWORD");
      int count1=0;
      foreach(Process pr in ProcWord)
      {
      count1++;
      }
А дальше делаешь что хочешь    
ProcWord.Lenght?


 Re: Как перехватить вызов winword.exe или файл?   [new]    
skorpk 
Сорри неправильно ответил.
      wrdApp = (Word.ApplicationClass)System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application");
это перехватываешь событие если ворд запущен. А далее смотришь какой фаил открыт по имени файла.
      wrdApp.ActiveDocument.FullName;
Можешь его принудительно блокировать.

http://www.sql.ru/forum/
PM MAIL   Вверх
mr.DUDA
Дата 7.12.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



DeviceIK, сам себе ответил  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
Naum
Дата 8.12.2006, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



 smile 
Цитата(mr.DUDA @  7.12.2006,  23:20 Найти цитируемый пост)
DeviceIK, сам себе ответил

Ну и молодец. Он просто хотел тебе доказать, что это можно сделать и без C++/WinApi. smile)Дух противоречия.



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
ivashkanet
Дата 8.12.2006, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Если быть объективным, то нет:
Цитата
перехватывать запускаемые программы

Таким образом обрабатывается только уже запущенные процессы, а никак ни запускаемые.
PM MAIL WWW ICQ   Вверх
Naum
Дата 8.12.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(ivashkanet @  8.12.2006,  12:38 Найти цитируемый пост)
Таким образом обрабатывается только уже запущенные процессы, а никак ни запускаемые.

А в принципе, какая разница? В списке процессов запущенный процесс появляется все таки раньше, чем пользователь увидит, что процесс запущен. Почему бы не считать его запускаемым?



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
ivashkanet
Дата 8.12.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Naum, не, я не про то.
Как узнать, что процесс собирается запуститься?
Гонять трэд в цикле и проверять: не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-не-запущен-ли-ворд-
 smile 
Для этого нужно событие запуска нового процесса.
А для этого, ИМХО, нужен WinAPI
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 8.12.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Пример с word - это частный случай, использующий к тому же OLE для работы с экземпляром запущенного word.  Вопрос стоит как перехватить и запретить запуск приложения? Или как работать с MS Word?

Цитата(Naum @  8.12.2006,  08:51 Найти цитируемый пост)
Ну и молодец. Он просто хотел тебе доказать, что это можно сделать и без C++/WinApi. )Дух противоречия.

Ну и ради бога, никто не запрещает делать так как нравится. Пусть тянет ворд через COM, если это поможет.


--------------------
user posted image
PM MAIL WWW   Вверх
Naum
Дата 8.12.2006, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(DeviceIK @  7.12.2006,  00:21 Найти цитируемый пост)
обработать открываемый в нем файл

А слона-то я ни приметл.  smile 

Цитата(mr.DUDA @  7.12.2006,  11:30 Найти цитируемый пост)
проще тот же код написать на C++/WinAPI.

Но это мне тоже не совсем нравиться. Что же мне теперь все языки учить?



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
mr.DUDA
Дата 8.12.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



В 90% случаев любую задачу можно решить, используя те языки и технологии, с которыми ты знаком. Насколько это будет криво или наоборот - прямо, зависит не только от прямоты рук программиста, но и от близости предметной области задачи к документированным возможностям, которые язык/технология предоставляет. Кто спорит - пишите себе драйверы и т.п. руткиты в режиме ядра, только учтите что большая часть кода в любом случае будет вынесена из managed в native. Тут дело даже не в производительности, которую будет выдавать написанный в C# код, обрабатывающий запуск каждого приложения в системе; бог с ней, с производительностью.

Но объясните мне глупому, какой выигрыш по  возможностям, безглючности, удобству и т.п. мы получим, если вместо одной exe-шки написанной на C++/WinAPI будет exe на C#/.NET, юзающая кагал внешних dll, написанных на том же C++/WinAPI ??? Учитывая то, что содержательного кода в такой задаче будет минимум (проверить имя файла, имя приложения; заблокировать или разрешить), какой резон для этого писать его на C# ?


--------------------
user posted image
PM MAIL WWW   Вверх
DeviceIK
Дата 8.12.2006, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.12.2006

Репутация: нет
Всего: нет



На дотнете - это просто прихоть. Билдер надоел донельзя! Хочется чего-то нового. Если понадобиться, то будет с++ и апи. А так, действительно интересно изучеть язык при решении конкретной задачи.
PM MAIL   Вверх
kamax70
Дата 20.3.2010, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 7.3.2010

Репутация: нет
Всего: нет



А допустим если задача выглядит так :
Например запускается любое приложение А, вызывающее каку-либо функцию (хоть тот же MessageBox с текстом Х) по нажатию например кнопки. Затем я запускаю своё приложение, после чего по нажатию кнопки в приложении А будет появляться MessageBox с текстом Y, заданным мной.
Я вроде читал в нете, что тут нужно внедрять написанный мной Dll в процесс А.
Скажите, такую программу можно написать на C#, или все же проще на С++? Если можно, то подскажите нужные для этого библиотеки или литературу...Очень нужно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.