Здорова ALL ! У меня есть задача над которой я страдаю уже неделю. Состоит она в следующем: Есть некий EXE-file. Нужно написать прогу под NT, которая бы висела в памяти и скажем каждые 10 сек. сканировала запущенные процессы находила определенный участок исполняемого кода принадлежащего нашему EXE-file и если этот участок обнаруживала (т.е. EXE-file запущен) то терминейтила бы его. Я использовал функцию ReadProcessMemory. Находил стартовый адрес потока Process View-ом и читал несколько байт. Затем смотрел exe-шник и не находил там этой строки. Посоветуйте как решить задачку?
Доброе время суток, [sp]_root! Я чтото не понял, так есть конкретный EXE файл и ты должен время от времени сканировать работает он или нет или есть у тебя шаблон кода, и ты должен сканировать память и определить загружен ли он. Ну при случае 1 , все намного просто. BOOL EnumProcesses( DWORD *lpidProcess, // array of process identifiers DWORD cb, // size of array DWORD *cbNeeded // number of bytes returned ); в lpidProcess получиш хендлы всех процессов. DWORD GetModuleFileNameEx( HANDLE hProcess, // handle to process HMODULE hModule, // handle to module LPTSTR lpFilename, // path buffer DWORD nSize // maximum characters to retrieve ); в lpFilename получиш имя файла, и сравниш с твоим ехешником. если совпадет то киллиш BOOL TerminateProcess( HANDLE hProcess, //
handle to the process UINT uExitCode // exit code for the process ); А при случае 2 все намного усложняется. Удачи! Ответ отправлен: 06.02.2003, 17:00 Отправитель: xiron Отвечает baldr
Доброе время суток, [sp]_root! То есть, ты хочешь, чтобы прога каждые 10 сек сканировала все твои 128 или 256 Mb памяти, искала там кусок кода, а потом убивала ни в чем неповинный текстовый редактор, в котором ты просматривал в hex-кодах тот exe-шник? :))) В общем, это, конечно, шутка, но в каждой шутке только доля шутки, так что вот мое мнение: такую прогу написать, конечно, реально, но работа ее - это абсурд. Во-первых, поиск в таком объеме памяти - это довольно долгое занятие, когда какой-нибудь ArtMoney ищет нужный байт - это тоже не очень быстро, а тут - целый блок! В общем, тормозить все это будет жутко! Многие программы жутко похожи, если их рассмотреть под дебаггером... В всяком случае, начало кода у всех, почти, виндовых прог стандартно. В общем, чем тебе помочь я не знаю, но может, есть более легкие пути?
Ответ отправлен: 07.02.2003, 01:51 Отправитель: baldr
Вопрос № 567
Здравствуйте эксперты. Как добавить в таблицу (Microsoft FlexGrid Control, version 6.0) элемент? Там, (в классе CMSFlexGrid) есть метод AddItem(LPTCSTR item, const VARIANT &index), дак вот, что это за VARIANT? Если у кого есть ссылки(исходники) где находится описание этого то скиньте пожалуйста на мыло (brothers@atnet.ru) Заранее благодарен.
Приветствую Вас, KydesNik! Ты можешъ передатъ просто int typedef struct tagVARIANT { VARTYPE vt; unsigned short wReserved1; unsigned short wReserved2; unsigned short wReserved3; union { Byte bVal; // VT_UI1. Short iVal; // VT_I2. long lVal; // VT_I4. float fltVal; // VT_R4. double dblVal; // VT_R8. VARIANT_BOOL boolVal; // VT_BOOL. SCODE scode; // VT_ERROR. CY cyVal; // VT_CY. DATE date; // VT_DATE. BSTR bstrVal; // VT_BSTR. DECIMAL FAR* pdecVal // VT_BYREF|VT_DECIMAL. IUnknown FAR* punkVal; // VT_UNKNOWN. IDispatch FAR* pdispVal;
// VT_DISPATCH. SAFEARRAY FAR* parray; // VT_ARRAY|*. Byte FAR* pbVal; // VT_BYREF|VT_UI1. short FAR* piVal; // VT_BYREF|VT_I2. long FAR* plVal; // VT_BYREF|VT_I4. float FAR* pfltVal; // VT_BYREF|VT_R4. double FAR* pdblVal; // VT_BYREF|VT_R8. VARIANT_BOOL FAR* pboolVal; // VT_BYREF|VT_BOOL. SCODE FAR* pscode; // VT_BYREF|VT_ERROR. CY FAR* pcyVal; // VT_BYREF|VT_CY. DATE FAR* pdate; // VT_BYREF|VT_DATE. BSTR FAR* pbstrVal; // VT_BYREF|VT_BSTR. IUnknown FAR* FAR* ppunkVal; //VT_BYREF|VT_UNKNOWN. IDispatch FAR* FAR* ppdispVal; // VT_BYREF|VT_DISPATCH. SAFEARRAY FAR* FAR* pparray; // VT_ARRAY|*. VARIANT FAR* pvarVal;
// VT_BYREF|VT_VARIANT. void FAR* byref; // Generic ByRef. char cVal; // VT_I1. unsigned short uiVal; // VT_UI2. unsigned long ulVal; // VT_UI4. int intVal; // VT_INT. unsigned int uintVal; // VT_UINT. char FAR * pcVal; // VT_BYREF|VT_I1. unsigned short FAR * puiVal; // VT_BYREF|VT_UI2. unsigned long FAR * pulVal; // VT_BYREF|VT_UI4. int FAR * pintVal; // VT_BYREF|VT_INT. unsigned int FAR *puintVal; //VT_BYREF|VT_UINT. }; };
Ответ отправлен: 07.02.2003, 10:45 Отправитель: Ramzes Отвечает Gibbel
Доброе время суток, KydesNik! VARIANT - это структура, которая, образно говоря, может принимать данные любого типа. Подробнее - MSDN. Ответ отправлен: 07.02.2003, 10:01 Отправитель: Gibbel Отвечает DiGiT[old]
Приветствую Вас, KydesNik! VARIANT это их vb насколько я помню типа void*, то есть указатель неопределенного типа(хотя в VB их нет), там должен быть метод типа SetType, в нем указваешь свой тип... наверное так. А вообще все эти компоненты для VB и чтобы их юзать надо писать любые числовые значения в виде строк :))(изврат) Ответ отправлен: 07.02.2003, 03:29 Отправитель: DiGiT[old]
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.