Вобщем, ситуация такая, хочу открыть pagefile.sys на чтение. Написал драйвер, в нём добрался до объекта FILE_OBJECT файла pagefile.sys и до дескриптора этого файла процесса "System". Имея эти две сущности могу ли я как-то изменить права на pagefile.sys, так чтобы его можно было открыть на чтение, ну хотя бы из ядра ? P.S: Важно именно создать новый хэндл на файл, а не использовать существующий. Понятно, то что я могу просто взять хэндл процесса "System" и юзать его, ведь мой драйвер и есть часть процесса "System"
n0name, читал, но дело в том что на страничный файл нельзя открыть хэндл даже только для чтения аттрибутов
А вот если подумать, то вполне возможно что задачу не так просто разрешить. Дело в том что при создании файла pagefile.sys его share аттрибуты попадают вместе с запросом на создание в драйвер файловой системы, сама файловая система не позволяет открывать нешаренные файлы (ShareAccess = 0) и можно сколько угодно изменять поля ShareRead, ReadAccess объекта FILE_OBJECT, все они только для чтения, просто отражают текущее состояние этих флагов в драйвере файловой системы для этого открытого файла, но изменить соотвествующие флаги в самом драйвере файловой системы не представляется возможным, вроде бы не такого запроса - изменить ShareAccess и прочее. Возможно, единственное что остаётся сделать - пропатчить ntoskrnl.exe, в том месте где он открывает страничный файл(ы) изменить поле ShareAccess на FILE_SHARE_READ. Или можно всё-таки как-то проще сделать ?
Дык если у тебя есть FILE_OBJECT, какие тогда проблемы? Дергай IoPageRead() и все дела. Сам FILE_OBJECT страничного файла можно найти в структурах MmPagingFile[], а указатель на эти структуры из экспортируемых функций, например, FsRtlIsFileObjectAPagingFile. Для чтения можно использовать IoPageRead(), для записи - IoSynchronousPageWrite() PS. В моей статье про управление памятью даже пример есть как прочитать из файла подкачки выгруженную в данный момент страницу виртуальной памяти.
Great, это всё хорошо, но дело в том что мне позарез нужен новый хэндл на страничный файл. Меня интересует как это сделать, а читать из страничного файла просто конечно )
n0name, думаю это не поможет, страничный файл не открывается только лишь потому что у него ShareAccess не установлен на чтение, права на него у меня есть, я работаю из под System. Следовательно, мне просто нужно изменить его ShareAccess, но вот как это сделать ?