Сабж Перехватив функцию, нужно проследить, из какого процесса был вызван данный системный сервис. Как?
Как я понимаю, по хэндлу... Тогда перефразирую... как узнать, какому процессу принадлежит переданный хэндл?
gilg объясни систему в неск. словах... потому как я сонный и немного туплю... Вот мы поставили хук. Далее нам нужно знать имена процессов, вызывающих функию... если в нашем хуке вызвать эту функцию, то она вернед ИД процесса? А если система многоядерная? Все-равно??
nitrotoluol Вызов SDT-шных функций происходит в контексте юзерского процесса (при вызове из ядра, соответственно в контексте System). Через PsGetCurrentProcessId получаем ид процесса, который произвел вызов, совершенно прозрачно относительно процессора на котором происходит обработка, т.к. контекст будет сохраняться при переключении на другой проц. Имя по ид --> через EPROCESS (поиск по форуму)
ID возвращается именно от System. P.S. Посмотрел внимательно ID System возвращается если ID процесса вообще отсутствует.
Great Ну да, это я поторопился малость. Когда драйвер верхнего уровня вызывает сервис, то контекст будет не системный.