есть два фактора, недающие мне покоя: 1) ключ реестра может иметь тип BINARY, в который можно положить любую бинарщину размером до 1 мб... таким образом в принципе в реестре можно хранить файлы любого размера, разбивая файл на части по 1 мб, и по мере необходимости собирать заново... 2) ко всем девайсам windows относится, как к файлам (если простите мне такое допущение)... и вот назрел такой вопрос... теоретически, если мы имеем файл размером n-мегабайт, хранящийся в реестре в n-полях какого-то ключа, можно ли каким-то образом отобразить этот файл из реестра в виртуальную память процесса и работать с ним, как с отображением (то есть маппировать различные его части, чтобы при снятии отображения изменения сохранялись, в определенные моменты можно было делать flush и тд)? ЗЫ не спрашивайте зачем, это чисто академический интерес, пример привел, чтобы было понятнее, о чем я спрашиваю)))
1) А почему бы и нет? 2) Работа с устройствами в винде: WIN32->натив(ntdll.dll.NtCreateFile & NtDeviceIoControlFile) -так что Вы правы.
) я уже давно подобную идею вынашиваю, вот только к реализации так и не приступил. Практическая польза от этого будет только для малвари. Существенный минус этой идеи - это то что сам загрузчик будет существовать в виде отдельного exe файла, имхо, это на корню губит всю идею.
ADD по п.2: а вообще "файл" - понятие абстрактное, существуют лишь объекты со своими типами и хар-ками. Естественно ф-ции типа CopyFile для девайса не пройдут
да-да... но я чет не понимаю, как это сделать... то есть, как отобразить определенное поле в память?... допустим, составить полное отображение из нескольких полей, можно последовательно отобразив в память каждое из полей... но как можно добраться до поля?
А в чем тут проблема? Можно хоть кусок кода хранить, потом отображать в память и передавать управление. Если хранить в ключах всю прогу - то использовать свой загрузчик. Естественно, как заметил Flint_ta кто-то должен же будет проводить все эти махинации, правда не обязательно exe...
наверное я что-то недопонимаю простой вещи... поясните пожалуйста... например... вот у меня есть хендл с полными правами ключа, в полях которого храниться бинарщина, которую мне нужно отобразить в виртуальную память процесса... как имея хендл ключа и имена полей отобразить бинаржину в память?)))
Считать содержимое ключа, а в качестве буфера указать выделенную предварительно память, после чего присвоить ей аттрибут на исполнение и передать управление (если это всего лишь кусок кода).
При чём тут это? Он хочет сделать аналог FileMapping для ключа реестра. Т.е. по аналогии с файлом мапишь ключь на область RAM, и потом все изменения в RAM прозрачно переносятся в ключь. Стандартными средствами сделать нельзя.
Тьфу..загнался.. Система где-то в памяти хранит отображение реестра, но уверен из ring3 туда не доберешься.
да дело даже не в ринг3... все равно, если я найду область памяти, на которую отображен реестр, её придется самостоятельно парсить... реестр ведь своего рода бд, поля наверняка разделены по сегментам, блокам и тд (не бейте за терминологию, говорю по аналогии с файловыми системами)... кстати, никто не в курсе как устроена бд реестра виндовс? гуглил, но ничего не нашел((
http://paullee.ru/regstr4.html На русском языке более токового описания я не встречал. Нужный ключ реестра можно сдампить на диск стопицот способами, если чем-то не устраивают стандартные API. В файлах реестра, насколько я понимаю, можно хранить свои данные-код. Только к текущему файлу куста система так просто не подпустит. Пусть меня поправят опытные товарищи.
хе-хе... я даже в терминологии не ошибся))) большое спасибо за ссылку! я с пол года назад все собирался сделать базу данных с организацией аля реестр виндовс, но так и не сел... теперь есть материал для обдумывания))) есть смотреть исходники ntpasswd!))) спасибо!
Смотря для чего, конечно... Может быть, прямо в реестре и делать базу? Винда с реестром довольно шустро работает. Ничего изобретать не нужно, опять же. Запросто сохраняется на диск. Если под Win32, конечно.