Перехватив NtCreateProcessEx и вызывав ObReferenceObjectByHandle для параметра SectionHandle удалось получить доступ к имени файла.. Вопрос - как по SectionHandle добраться до данных в секции?
Это не "само собой", данная ошибка существенна и может повлиять на ещё не окрепшее мышление тех, кто не в курсе. Оба варианта и Nt- и Zw- в данном случае экспортируются ядром. Но если использовать Nt-вариант напрямую, это может привести к неожиданным отказам в доступе в случае, если требуется безусловный доступ к секции при условии, что все необходимые проверки входных данных уже выполнены драйвером.
вроде в куче мест написано когда и зачем нужно использовать ZwXXX, а когда NtXXX. Думаю каждый драйверописатель должен понимать эту разницу, так же как и знать, что такое irql, как работать с ресурсами (память, ивенты, мьютексы).
В документации совершенно чётко сказано, что значит этот параметр. Если ты не знаешь, что такое "committed", то, похоже, тебе стоит подучиться немного, а не лезть в огород.
Есть ощущение что меня дезинформировали... Потрассировав CreateProcessA вижу 1) ZwCreateSection 2) ZwOpenSection 3) ZwMapViewOfSection 4) ZwCreateProcessEx 5) ZwReadVirtualMemory 6) ............... Получается в ZwCreateProcessEx приходит хендел на уже смапленую секцию.. Повторный вызов ZwMapViewOfSection говорит ошибка в хенделе. Так как же правильно добраться до данных? (уточню свою задачу - нужно считать CRC запускаемого файла. Пытался поновой открыть ZwCreateFile по полному имени - тоже не открылось)