собственно сабж... так как загрузщик винды делает отображение файла на виртуальную память, тупо открыть файл и записать туда N-байт видимо не получится... а если вносить изменения в байты отображения в виртуальной памяти, то внесенные изменения не фиксирубтся на диске из-за флага "копионврайт"... есть ли какие-нибудь варианты? может поменять какие-нить флаги к отображенным страницам виртуальной памяти или еще как-нить? заранее спасибо!
не-не... никакого жульничества, типа сторонних процессов, инжектов, батников и тд... только своим процессом...
А прямая запись на диск не проканает? Теоретически, должно получится. Я не помню какой параметр передавать DeviceIoControl, но можно получить адрес своего файла и потом писать туда, открыв \\.\PhysicalDriveN
rmka Тока для этого нужно иметь админские привелегии... а так - http://www.wasm.ru/article.php?article=lockfileswork - там и кодес есть...
Rel А что значит "и тд"? Эффект "раздвоения личности" можно и только своим процессом провернуть - переименовываешь свой экзешник через MoveFile и создаешь его копию с прежним именем, вносишь изменения в копию и если нужно, то и в свой запущенный образ. Переименованный файл можно удалять при следующем запуске, а можно и вообще не удалять - пусть болтается как куча разного мусора в *\Local Settings\Temp и т.п.
gorodon вы подкинули мне идею поискать открытый юзермодный хендл на файл с образом... но после нескольких итераций гугления выяснилось, что юзермодный псевдо-хендл на файл образа действительно существовал в операционных системах младше xp и имел значение 4... начиная с xp такого хендла судя по всему нет... так что в принципе все методы указанные в статье по ссылке отпадают... видимо необходимо копать куда-то в сторону отображений и как-то зафлашить изменения сделанные в виртуальной памяти на диск... rmka антивирусы вряд ли позволят обращаться напрямую к PhysicalDrive... слишком модными сейчас являются всякого рода буткиты... leo ну это как раз таки был мой запасной вариант))
rmka,Rel Ну, вам бут-сектор не надо ж трогать, поэтому подойдет Код (Text): hFile = CreateFile( "\\\\.\\C:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); -это точно работает и под 7... только насчет привелегий.. по-моему нужны админские..