Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отследить запуск нового процесса? 
:(
    Опции темы
COOLHack
Дата 2.5.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Как отследить запуск процесса?
Моя программа должна будет при запуске нового процесса замарозить его, потом проверить на наличие в списке довереных, если он там есть -разморозить, если нету вывести пользывателю всю доступную информацию о процессе, а также загрузить описание процесса и показать его вместе с остальной инфой.

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

Дак каким образом можно отследить запуск процесса, как можно быстрее, чтоб процесс неуспел ничего сделать?  

Это сообщение отредактировал(а) COOLHack - 2.5.2009, 15:07
PM MAIL   Вверх
MetalFan
Дата 2.5.2009, 16:17 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



самое надежное - писать драйвер. остальное - игрушки. имхо

Это сообщение отредактировал(а) MetalFan - 2.5.2009, 16:17


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
bartram
Дата 2.5.2009, 19:32 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

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



Как правильно подметил MetalFan, надо писать драйвер, можно мгновенно отреагировать на это из ядра системы, а в пользовательском режиме много чего может произойти с момента запуска экзешника до создания процесса, все не отследишь.


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
COOLHack
Дата 2.5.2009, 19:42 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



А где можно найти информацию о том, как написать этот самый драйвер?
PM MAIL   Вверх
COOLHack
Дата 2.5.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



или возможно есть готовые решения данной проблемы? Я поискал - не нашел
PM MAIL   Вверх
bartram
Дата 3.5.2009, 09:06 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

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



Цитата(COOLHack @  2.5.2009,  21:42 Найти цитируемый пост)
А где можно найти информацию о том, как написать этот самый драйвер? 

Драйвера Windows режима ядра


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
COOLHack
Дата 4.5.2009, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Вот руководствуясь статьей я сделал драйвер который ещё ничего полезного не умеет делать.  

Как сделать чтоб он узновал о появлении нового процесса и сообщал моей программе?

Это сообщение отредактировал(а) COOLHack - 4.5.2009, 23:05
PM MAIL   Вверх
Riply
Дата 5.5.2009, 01:15 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  4.5.2009,  22:55 Найти цитируемый пост)
Вот руководствуясь статьей я сделал драйвер который ещё ничего полезного не умеет делать.  


В смысле скомпилировал код, который прилагается ?

Цитата(COOLHack @  4.5.2009,  22:55 Найти цитируемый пост)
Как сделать чтоб он узновал о появлении нового процесса и сообщал моей программе?


Например, можно использовать PsSetCreateProcessNotifyRoutine
PM MAIL   Вверх
COOLHack
Дата 5.5.2009, 15:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



А пример использования можете показать? 
PM MAIL   Вверх
Riply
Дата 5.5.2009, 21:13 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  5.5.2009,  15:09 Найти цитируемый пост)
А пример использования можете показать?  

Я не от "нечего делать" задала вопрос
Цитата(Riply @  5.5.2009,  01:15 Найти цитируемый пост)
В смысле скомпилировал код, который прилагается ?

но ты его проигнорировал.
Это была не насмешка. Дело в том, что это в Delphi можно
легко привести пример кода, ибо исходно у всех одинаковое "окружение".
При разработке драйвера под Delphi, это не совсем так.
Например, у одного одни System и SysInit, у другого - другие.
А с переводом DDK, тут вообще жуть, ибо у каждого свой собственнолапный.
Может, конечно и есть "универсальный, единый для всех" но я его не видела.
А те что встречала, мне, мягко говоря, не очень понравились smile
Соответственно, код, работающий у меня, у тебя может приводить к BSOD.

Так вот. Если ты "скомпилировал код, который прилагается ", 
то у меня есть хоть какое-то представление о том, что у тебя там происходит.

Ну да ладно. Это была так, прелюдия smile
Перейдем к делу:
1. Открываем MSDN и находим:

NTSTATUS  PsSetCreateProcessNotifyRoutine(
    IN PCREATE_PROCESS_NOTIFY_ROUTINE  NotifyRoutine,   IN BOOLEAN  Remove);
Parameters
NotifyRoutine 
Specifies the entry point of a caller-supplied process-creation callback routine. 
Remove 
Indicates whether the routine specified by NotifyRoutine should be added to or removed from the system's 
list of notification routines. If FALSE, the specified routine is added to the list. If TRUE, 
the specified routine is removed from the list.


2. Со вторым параметром все ясно. Смотрим определение PCREATE_PROCESS_NOTIFY_ROUTINE:

Highest-level drivers can call PsSetCreateProcessNotifyRoutine to set up their process-creation notify routines, 
declared as follows:
VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE) (
    IN HANDLE  ParentId,   IN HANDLE  ProcessId,  IN BOOLEAN  Create);


Далее там идет подробное описание параметров. Я его уж не буду сюда копи-пастить. Хорошо ? smile

3. Глядя на все это, пишем свою реализацию (например, что-то такого типа):
Код

procedure CreateProcessNotyfy(const ParentId: THANDLE; const ProcessId: THANDLE; IsCreate: BOOLEAN); stdcall;
var
 RetStatus: NTSTATUS;
begin
 if IsCreate then
  begin
   RetStatus := Наша_Реакция_На Создание_Процесса(ParentId, ProcessId);
   Log_WriteW('CreateProcessNotyfy', 'CreateProcess', RetStatus, ParentId, ProcessId);
  end
 else Log_WriteW('CreateProcessNotyfy', 'RemoveProcess', STATUS_SUCCESS, ParentId, ProcessId);
end;

4. Где-то, например при загрузке драйвера, вызываем
   PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, False),
   соответственно при выгрузке PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, True);

А теперь, скажи мне на милость, какой из этих пунктов, ты не сумел сделать, как не старался ?
Посмотреть в MSDN ? Т.е. не царское это дело, за тебя другие сделают ?
Или написать несколько простейших строчек кода ? 
Тогда может ты рановато приступил к работе с драйверами ?

Мое IHMO, что "задавание вопросов на форуме", подразумевает совместную работу в поиске решения
спрашивающего и отвечающего, а совсем не выполнение работы одним за другого.


Это сообщение отредактировал(а) Riply - 5.5.2009, 21:20
PM MAIL   Вверх
COOLHack
Дата 5.5.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Цитата

А теперь, скажи мне на милость, какой из этих пунктов, ты не сумел сделать, как не старался ?
Посмотреть в MSDN ? Т.е. не царское это дело, за тебя другие сделают ?
Или написать несколько простейших строчек кода ? 
Тогда может ты рановато приступил к работе с драйверами ?

По большому счёту я не знал что делать

Цитата

Мое IHMO, что "задавание вопросов на форуме", подразумевает совместную работу в поиске решения
спрашивающего и отвечающего, а совсем не выполнение работы одним за другого.

Полностью согласен с тобой



В место "Наша_Реакция_На Создание_Процесса" нужно вписать имя какой-то функции? 
Когда я вставляю в код 
Код

procedure CreateProcessNotyfy(const ParentId: THANDLE; const ProcessId: THANDLE; IsCreate: BOOLEAN); stdcall;
var
 RetStatus: NTSTATUS;
begin
 if IsCreate then
  begin
   RetStatus := Наша_Реакция_На Создание_Процесса(ParentId, ProcessId);
   Log_WriteW('CreateProcessNotyfy', 'CreateProcess', RetStatus, ParentId, ProcessId);
  end
 else Log_WriteW('CreateProcessNotyfy', 'RemoveProcess', STATUS_SUCCESS, ParentId, ProcessId);
end;

то у меня даже не компилируется. Строку 
RetStatus := Наша_Реакция_На Создание_Процесса(ParentId, ProcessId); 
пробывал коментировать.
PM MAIL   Вверх
Riply
Дата 6.5.2009, 00:04 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  5.5.2009,  22:41 Найти цитируемый пост)
то у меня даже не компилируется. Строку 
RetStatus := Наша_Реакция_На Создание_Процесса(ParentId, ProcessId); 


И не скомпилится. Вместо нее должна быть твоя функция,
реализующая те действия, которые ты хочешь чтобы происходили при "создании" нового процесса.

P.S.
 Log_WriteW тоже "не проскочит". Я не помню как называется функция логирования у ama_kid`а.

P.P.S.
 Позволю себе, дать тебе дружеский совет:
 бросай работу с драйвером, и садись за хорошие книжки по программированию и основам программирования.
 Попробуй написать какую-нибудь программу сам (а не скопи-пастить код).
 Например, по обмену информацией между процессами.
 Потом можно будет и продолжить разговор, но уже на другом уровне.
 
PM MAIL   Вверх
COOLHack
Дата 6.5.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Цитата

И не скомпилится. Вместо нее должна быть твоя функция,

знаю, коментировал строку. 

А вот на Log_WriteW  внимания не обратил

Это сообщение отредактировал(а) COOLHack - 6.5.2009, 00:25
PM MAIL   Вверх
Riply
Дата 6.5.2009, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(Riply @  6.5.2009,  00:04 Найти цитируемый пост)
Попробуй написать какую-нибудь программу сам (а не скопи-пастить код).
 Например, по обмену информацией между процессами.


Кстати, у Рихтера хорошо описана технология перехвата API ф-ий.
С ее помощю можно отслеживать создание новых процессов.
PM MAIL   Вверх
COOLHack
Дата 6.5.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



а если оставить только это: 

Код

procedure CreateProcessNotyfy(const ParentId: THANDLE; const ProcessId: THANDLE; IsCreate: BOOLEAN); stdcall;
var
 RetStatus: NTSTATUS;
begin
 if IsCreate then
  begin

  end
 else begin

end;
end;

то нормально компилируется.

но допустим теперь необходимо заморозить процесс, из обычного приложения я делал это так: 
http://forum.vingrad.ru/topic-43506.html 

А как делается тоже самое, но из драйвера? я так понимаю обычное копирование кода тут не прокатит. 




Это сообщение отредактировал(а) COOLHack - 6.5.2009, 00:48
PM MAIL   Вверх
Riply
Дата 6.5.2009, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  6.5.2009,  00:39 Найти цитируемый пост)
А как делается тоже самое, но из драйвера? я так понимаю обычное копирование кода тут не прокатит/// 


Нет, "не прокатит".  Даже вызов простейшей ф-ии типа Move (с валидными параметрами),
приведет к BSOD.

Ты не замораживай его, а для начала попробуй записывать в лог когда кто создан или уничтожен.
И не только ID, созданного, но и его имя.
Когда это будет получаться, можно будет подумать и о других действиях.
PM MAIL   Вверх
COOLHack
Дата 6.5.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Цитата

4. Где-то, например при загрузке драйвера, вызываем
   PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, False),
   соответственно при выгрузке PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, True);

Когда это делаю у меня не компилируется. 
Код

function DriverEntry;
var
 Status        : NTSTATUS;
 DeviceObject  : PDEVICE_OBJECT;
 uniDosString  : UNICODE_STRING;
 uniNameString : UNICODE_STRING;
begin
PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, False); //1

ну и 
Код

procedure ADriverUnload(const DriverObject : PDRIVER_OBJECT); stdcall;
var
 uniDosString  : UNICODE_STRING;
begin
 PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, True); //2

и это ещё (без 2-х строк выше норм компилируется)
Код

procedure CreateProcessNotyfy(const ParentId: THANDLE; const ProcessId: THANDLE; IsCreate: BOOLEAN); stdcall;
var
 RetStatus: NTSTATUS;
begin
 if IsCreate then
  begin

  end
 else begin

end;
end;


Я так понял 
Код

WriteLog('...')
 и есть запись в лог?

Это сообщение отредактировал(а) COOLHack - 6.5.2009, 22:58
PM MAIL   Вверх
Riply
Дата 6.5.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  6.5.2009,  21:36 Найти цитируемый пост)
Когда это делаю у меня не компилируется. 


Показывай, как и где ты ее декларировал.

P.S.
 Настоятельно рекомендую прислушаться к совету, который я тебе уже давала:

Цитата(Riply @  6.5.2009,  00:04 Найти цитируемый пост)
бросай работу с драйвером, и садись за хорошие книжки по программированию и основам программирования.
 Попробуй написать какую-нибудь программу сам (а не скопи-пастить код).


PM MAIL   Вверх
COOLHack
Дата 7.5.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



а как правельно декларировать её? в статье ссылка на которую  в первом посте я не нашол этой инфы
PM MAIL   Вверх
Riply
Дата 7.5.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  7.5.2009,  14:33 Найти цитируемый пост)
а как правельно декларировать её? в статье ссылка на которую  в первом посте я не нашол этой инфы 


Таак.
Давай "расставим точки над i"
1.  Я спросила: "Показывай, как и где ты ее декларировал".
     Это означает, что тебе надо привести свой вариант декларации, пусть с ошибками.
     Тогда я смогу обяснить в чем их (ошибок) суть, иначе я бессильна тебе помочь.
2.  "Меня терзают смутные сомнения" (с), что ты вообще ее не декларировал.
      В этом случае, ты не владеешь элементарными азами и тебе рано не то что
      заниматься разработкой драйверов, но даже просто работать с API.
3.   По ссылке есть вся необходимая информация и по декларации и по многому другому.
      Если ты поленился это изучить и разобраться, то я просто "умываю руки".
      Если же чесно, пытался, но не смог, то возвращаемся к исходной точке: 
        у тебя серьезные пробелы в азах программирования.
      В любом из этих двух вариантов, дальнейшее обсуждение способов перехвата бессмысленно.


 
PM MAIL   Вверх
COOLHack
Дата 7.5.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Цитата

Я спросила: "Показывай, как и где ты ее декларировал".

Код

function PsSetCreateProcessNotifyRoutine(const NotifyRoutine: PCREATE_PROCESS_NOTIFY_ROUTINE; const Remove: BOOLEAN): NTSTATUS; stdcall; external 'ntoskrnl.lib' name '_PsSetCreateProcessNotifyRoutine@8';


Пытался делать перед 
Код

implementation

{$I BCORE.INC}
{$I MYDRV.INC}
 


Это сообщение отредактировал(а) COOLHack - 7.5.2009, 17:10
PM MAIL   Вверх
Riply
Дата 7.5.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



COOLHack, сама декларация, вроде, правильная. Место, в принципе, тоже сгодится.

Теперь, во всей своей красе, начинаются прелести различий "версий" DDK, о которых я говорила раньше smile

В твоей DDK описан тип PCREATE_PROCESS_NOTIFY_ROUTINE ?
Если нет, то его надо описать вручную, иначе получаем ошибку недекларированного идентификатора.





PM MAIL   Вверх
COOLHack
Дата 7.5.2009, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Это надо искать в файле NTDDK.INC? если там то нету, но в ntddk.h нашол такие строки: 
Код

typedef
VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE)(
    IN HANDLE ParentId,
    IN HANDLE ProcessId,
    IN BOOLEAN Create
    );

NTSTATUS
PsSetCreateProcessNotifyRoutine(
    IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
    IN BOOLEAN Remove
    );



Это сообщение отредактировал(а) COOLHack - 7.5.2009, 23:31
PM MAIL   Вверх
Riply
Дата 7.5.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  7.5.2009,  23:24 Найти цитируемый пост)
Это надо искать в файле NTDDK.INC? если там то нету, но в ntddk.h нашол такие строки: 


Теперь переводим эти строки (не все, а только нужные) на русский... ой! тьфу !  на Delphi smile
и добавляем в свой проект.
PM MAIL   Вверх
COOLHack
Дата 7.5.2009, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Похоже с переводом проблемы, я так понял нужна верхня часть? 
сделал так: 
Код

procedure PCREATE_PROCESS_NOTIFY_ROUTINE(const ParentId:HANDLE, const ProcessId:HANDLE, const Create:BOOLEAN);

но не компилируется в этом случае. Данный код ставил выше декларирования(его пробывал коментировать, результат не изменился)
PM MAIL   Вверх
Riply
Дата 8.5.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  7.5.2009,  23:51 Найти цитируемый пост)
Похоже с переводом проблемы 


Без умения переводить мы никуда не уедем.

Цитата(COOLHack @  7.5.2009,  23:51 Найти цитируемый пост)
я так понял нужна верхня часть? 


Да. Нужно описание типа.

Цитата(COOLHack @  7.5.2009,  23:51 Найти цитируемый пост)
сделал так: 


А что сделал ты ? 
В смысле что ты хотел описать,  ибо то что ты написал - мягко говоря, "бред сивой кобылы" smile

PM MAIL   Вверх
COOLHack
Дата 8.5.2009, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Код

typedef
VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE)(
    IN HANDLE ParentId,
    IN HANDLE ProcessId,
    IN BOOLEAN Create
    );

и есть то самое описание?
Но в этом случае как его правельно перевести? Или где найти информацию о том как правельно перевести ? 
PM MAIL   Вверх
Riply
Дата 8.5.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  8.5.2009,  00:23 Найти цитируемый пост)
и есть то самое описание?


Угу

Цитата(COOLHack @  8.5.2009,  00:23 Найти цитируемый пост)
Но в этом случае как его правельно перевести?


IMHO, единственный способ перевода это:
1. понять что, зачем и почему написано
2. написать "понятое" на Delphi

Других способов я не знаю smile
PM MAIL   Вверх
COOLHack
Дата 8.5.2009, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



не вкурю как нужно делать, можешь пояснить? smile
PM MAIL   Вверх
Riply
Дата 8.5.2009, 03:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  8.5.2009,  01:35 Найти цитируемый пост)
не вкурю как нужно делать, можешь пояснить?


Написать перевод, я конечно могу. Только проку от этого никакого не будет.
Тебе придеся переводить очень(!) много всяких структур и еще черта в ступе smile
Ведь не будешь же ты бегать на форум с каждой из них
и протянутой рукой что-бы кто-то ее перевел тебе.
Поэтому давай сразу учится переводить самостоятельно.
Поверь мне, без этого умения ты и шагу не сделаешь.
Уж не говоря о том, что все примеры в MSDN не на Delphi писаны smile

Показывай варианты перевода, пусть с ошибками - тебе помогут. 
Это не так сложно как кажется smile
PM MAIL   Вверх
THandle
Дата 8.5.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



COOLHack, насчет перевода почитай вот этот постик:

http://forum.vingrad.ru/index.php?showtopi...t&p=1450107

Думаю, станет понятнее что куда. smile
PM   Вверх
COOLHack
Дата 8.5.2009, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Пытался делать так:
Код

 type
   PCREATE_PROCESS_NOTIFY_ROUTINE^  (
    const ParentId:HANDLE,
    const ProcessId:HANDLE,
    const Create:BOOLEAN
    ); stdcall;

но не компилировалось, потом попросил помочь знакомого, он сказал сделать так:
Код

type
 TPCREATE_PROCESS_NOTIFY_ROUTINE = packed record
 ParentId:THandle;
 ProcessId:THandle;
 Create:boolean;
end;

Если так делаю , то компилируется, но только когда строка 
Код

function PsSetCreateProcessNotifyRoutine(const NotifyRoutine: PCREATE_PROCESS_NOTIFY_ROUTINE; const Remove: BOOLEAN): NTSTATUS; stdcall; external 'ntoskrnl.lib' name '_PsSetCreateProcessNotifyRoutine@8';

Закоментирована 

Где ошибка? 


Это сообщение отредактировал(а) COOLHack - 8.5.2009, 14:15
PM MAIL   Вверх
Rrader
  Дата 8.5.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



COOLHack, перевод неверен. PCREATE_PROCESS_NOTIFY_ROUTINE - ключевое сочетание Pointer to ROUTINE. Оно означает указатель на подпрограмму - т.е. процедуру или функцию в Delphi. В Delphi на месте подобных параметров обычно принято ставить безликий Pointer, либо передефинированный, как тут:
Код

type
  TFarProc = Pointer;

  TFNWndProc = TFarProc;
  TFNDlgProc = TFarProc;
  TFNTimerProc = TFarProc;
  TFNGrayStringProc = TFarProc;
  TFNWndEnumProc = TFarProc;
  TFNSendAsyncProc = TFarProc;
  TFNDrawStateProc = TFarProc;

Но есть и другой путь, которого от тебя добиваются.

Добавлено через 2 минуты и 35 секунд
Да и модификаторы const не нужны. Нигде.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
COOLHack
Дата 8.5.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Сделал так:

Код

type
 PCREATE_PROCESS_NOTIFY_ROUTINE = Pointer;

Скомпилировалось

Добавлено через 8 минут и 57 секунд
Но теперь если раскоментировать строки 
Код

PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, False);

и 
Код

PsSetCreateProcessNotifyRoutine(CreateProcessNotyfy, True);

то не компилируется. 
CreateProcessNotyfy на данный момент имеет вид
Код

procedure CreateProcessNotyfy(const ParentId: THANDLE; const ProcessId: THANDLE; IsCreate: BOOLEAN); stdcall;
var
 RetStatus: NTSTATUS;
begin
 if IsCreate then
  begin

  end
 else begin

end;
end;

PM MAIL   Вверх
MetalFan
Дата 8.5.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



может поможет в чем-то автору частично переведенное Native API тут. там конечно не все, но кое-что есть)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Rrader
  Дата 8.5.2009, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


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

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



Цитата(COOLHack @  8.5.2009,  20:56 Найти цитируемый пост)
то не компилируется. 

Потому что синтаксически неверно написано.


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
COOLHack
Дата 8.5.2009, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



где именно 
PM MAIL   Вверх
bems
Дата 8.5.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



с таким уровнем знаний языка ты драйвер не напишешь. Перехватывай апи в юзермоде.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
COOLHack
Дата 8.5.2009, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Цитата(bems @  8.5.2009,  19:36 Найти цитируемый пост)
с таким уровнем знаний языка ты драйвер не напишешь. Перехватывай апи в юзермоде. 


Уверен что напишу/ С вашей помощью
PM MAIL   Вверх
COOLHack
Дата 8.5.2009, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Не пойму где ошибка

или так правильно?

Код

type
 PCREATE_PROCESS_NOTIFY_ROUTINE = ^TCREATE_PROCESS_NOTIFY_ROUTINE;
 TCREATE_PROCESS_NOTIFY_ROUTINE = Pointer;


Это сообщение отредактировал(а) COOLHack - 9.5.2009, 01:38
PM MAIL   Вверх
Riply
Дата 9.5.2009, 09:13 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Имеем:
Код

VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE) (
    IN HANDLE  ParentId,
    IN HANDLE  ProcessId,
    IN BOOLEAN  Create);


Нам надо написать аналог на Delphi.
Смотрим, что делаешь ты:

Цитата(COOLHack @  8.5.2009,  14:15 Найти цитируемый пост)
Пытался делать так:

 type
   PCREATE_PROCESS_NOTIFY_ROUTINE^  (
    const ParentId:HANDLE,
    const ProcessId:HANDLE,
    const Create:BOOLEAN
    ); stdcall;


Это чудо не скомпилируется нигде. Что здесь описывается ? Ты понимаешь ? Я - нет.
Идем далее. Поптытка номер два:

Цитата(COOLHack @  8.5.2009,  14:15 Найти цитируемый пост)
но не компилировалось, потом попросил помочь знакомого, он сказал сделать так:

type
 TPCREATE_PROCESS_NOTIFY_ROUTINE = packed record
 ParentId:THandle;
 ProcessId:THandle;
 Create:boolean;
end;


И что это ? Это хоть чем-то напоминает функцию(процедуру) ?
Такое впечатление, что ты не понимаешь что мы пытаемся описать.

Идем далее. 
Rrader, предложил тебе простейший вариант, как все это сделать.
И что ? Ты не сумел, даже синтаксически верно оформить вызов.

Итого. Что мы имеем ?
Вся ветка к драйверам не имеет ни малейшего отношения.
Мы разбираемся с умением читать MSND и тем как декларировать что-то в Delphi.

Попробую дать еще один совет (хоть ты и игнорируешь их):
Начинай изучать основы. Создай ветку в начинающих.
Там тебе помогут научиться понимать MSDN и преводить ст-ры оттуда на Delphi.
Объяснят, как правильно декларировать. Что такое CallBack - функция. И т.д. и т.п.

Чтобы охладить твой пыл в плане самостоятельного написания драйвера, замечу,
что мы даже не смогли преодолеть порога компилируемости(!). А это говорит очень о многом.
А ведь дальше еще хуже и на порядки(!) сложнее. 
А что будет когда скомпилируется, то что ты написал методом тыка  ? 
(для другого метода, у тебя пока не хватает знаний) 
Тогда будем отвечать на вопросы "почему у меня BSOD" ? 
Пожалей свой компьютер, он ни в чем не виноват smile

Невозможно написать стихи (например, "в лесу родилась елочка"), не зная русского языка.
Почему же ты полагаешь, что возможно написать драйвер, 
не зная языка на котором пишешь ?


Это сообщение отредактировал(а) Riply - 9.5.2009, 09:18
PM MAIL   Вверх
COOLHack
Дата 9.5.2009, 10:44 (ссылка)  | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: -1
Всего: 0



Цитата

Нам надо написать аналог на Delphi.


Если тебя не затруднит, сделай это, но с пояснениями, что и от куда берётся. В следуйщий раз, возможно, на данном этапе у меня проблем не возникнет.
PM MAIL   Вверх
Riply
Дата 9.5.2009, 11:35 (ссылка) |    (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

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



Цитата(COOLHack @  9.5.2009,  10:44 Найти цитируемый пост)
Если тебя не затруднит, сделай это, но с пояснениями, что и от куда берётся. В следуйщий раз, возможно, на данном этапе у меня проблем не возникнет.


Знаешь. Написать правильно эти пять строк не проблема ни для меня,
ни для подавляющего большинства форумчан. 

И это было бы во сто крат легче - дать и отвязатся раз и навсегда, чем пытаться что-то пояснить.

Только скажи и я их дам. 
Только потом не обращайся ко мне с последующими вопросами 
(а они возникнут - не сомневайся. например: "а как декларировать вот это?"), 
потому что я готова помочь в понимании(обучении), но не в написании кода за кого-то другого,
кто даже не соизволил не то что изучить, а даже попытаться изучить язык, несмотря на настырные советы.
PM MAIL   Вверх
MetalFan
Дата 10.5.2009, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(Riply @  9.5.2009,  11:35 Найти цитируемый пост)
несмотря на настырные советы

... он продолжает задавать настырные вопросы по азам)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




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


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

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