Вопрос такой: я перехватываю функцию NtOpenProcess. Как во время работы моего хука узнать например полный путь и имя исполняемого файла вызывающего эту функцию процесса? И как записать это в лог-файл? P. S. Начал заниматься драйверами как говорится только вчера... Кое-что прочитал (частенько читаю статейки), но ещё не всё понял и практики в этом ровно 0, а драйверы пригодились по делу.
IoGetCurrentProcess в обработчике покажет EPROCESS вызывающего процесса, а там читай ProcessName. Если надо полный путь, то EPROCESS->SectionObject->FileObject - FILE_OBJECT файла из которого запущен процесс, имя файла вытаскивай оттуда.
Читай описани ZwWriteFile в ДДК. В качестве примеров могу посоветовать посмотреть KMD Kit от Four-F (хорошая штука , найти его можно на wasm-e.
KmdKit глянул... Нашёл, как реализовать работу с файлами. Но ещё меня интересует вот что: ведь может возникнуть ситуация, что я буду записывать из нескольких потоков в один файл (или я не прав?). Тогда что делать с синхронизацией? Critical section использовать?
Почитай исчо раз ) Только теперь про ZwCreateFile, создать описатель можно так, чтоб было возможно ожидание окончания ввода\вывода. Или почитай про синхронизацию, можно у Рихтера, можно в ДДК.
Drakon Либо можно еще узнать из Peb процесса, он постабильнее будет EPROCESS'a в плане консистенции, а то для каждой версии винды тебе придётся тянуть отладочные символы и ковырять структуру EPROCESS).
Можно, и он действительно будет постабильнее, но PEB можно изменить из юзермода, поэтому полагаться на него в драйверах будет наивно. Например фаерволлы никогда не полагаються на содержимое PEB.