CreateProcess делает NtClose в отношении исходного exe файла, мало того, после вызова NtCreateProcess она еще и закрывает секцию в которую был отображен исходный exe, т.к. NtCreateProcess (а точнее ZwCreateProcess) отмапила секцию в ring3-память создаваемого процесса и небходимости в секции нет. Как результат, SectionObject (XP+) из EPROCESS ничего полезного больше не содержит, а SectionBaseAddress из того же EPROCESS на самом деле указывает на начало exe образа в ring3 памяти процесса (какая нафиг это секция и какой SectionBaseAddress если адресок то из ring3). Поэтому получить по Pidу процесса хендл исходного exeшника или хендл секции, отображенной на этот exeшник невозможно - система их не хранит. Вот только для меня загадка - почему тогда исходный exe-файл держится системой и его невозможно удалить (исключение - сеть, там можно)? Его держит менеджер виртуальной памяти? Менеджер кэша? Может тогда они могут подсказать как достучаться до его содержимого...
The thread tries to access a page that is not present, and the system is unable to load the page. For example, this exception might occur if a network connection is lost while running a program over a network. This value is defined as STATUS_IN_PAGE_ERROR. Это в SDK описано, плясать видимо надо от обработчика Page Fault'ов, тут довольно подробно рассказано http://gl00my.chat.ru/nt/mem.txt
Наличье объекта ядра определяется не только количеством его хэндлов, но и количеством указателей на него. Объект разрушается когда он никем не используется, но в данном случае хэндл файла закрывается, но FileObject остается, тоже самое и с секцией. Еще исключение - альтернативные потоки данных в NTFS. Запиши экзешник в поток, запусти, и можно спокойно удалять хоть поток хоть сам файл.
Признаю, был неправ, секция существует, похоже действительно для менеджера памяти. Сейчас отследил от EPROCESS до FilePointer в ControlArea, далее lkd> dt nt!_SECTION_OBJECT_POINTERS 0x82f790fc получаю: +0x000 DataSectionObject : 0x824f8c00 +0x004 SharedCacheMap : (null) +0x008 ImageSectionObject : 0x82e38870 есть MiFindImageSectionObject и прочие на эту тему...
теперь проблема собрать все PTE (или заставить их собрать) в памяти и организованно прочитать их содержимое. поиск в гугле на 'MiFindImageSectionObject' дает удручающие результаты