можно ли сделать следующее 1)в программе создаю проекцию для данных(CreateFileMapping) 2)выхожу из программы(ExitProcess) 3)запускаю ехе, открываю проекцию и работаю с ней(OpenFileMapping), созданную в п.1 нужно чтобы созданный объект-проекция не закрывался после выхода. спасибо
если только проецировать файл... и то надо будет флаш делать для сохранения изменений, ну или корректно закрывать отображение...
ptr >можно ли сделать следующее На самом деле можно. При создании объекта нужно указать атрибут OBJ_PERMANENT. Но чтобы вызов прошёл успешно, необходимо обладать привилегией SeCreatePermanent – по умолчанию её нет даже у админов. (Нет, конечно можно и хендл секции в какой-нибудь другой процесс сдуплировать – но даже при оставленном в стороне обсуждении чистоты этого метода возникает вопрос о гарантии сохранности процесса-носителя). Rel Флаш для сохранения изменений не нужен.
Да. Хендлы закроются, отображения размапятся. Изменения сохранятся. Вообще говоря, при работе с отображениями нет необходимости хранить хендлы: Код (Text): file = CreateFile(); section = CreateFileMapping(file); CloseHandle(file); view = MapViewOfFile(section); CloseHandle(section); *PDWORD(view) = 54; // UnmapViewOfFile(view); // what TerminateProcess(self); // ever // Изменения сохранены.
Немного дополню Sol_Ksacap. Пользовательские хендлы храняться в таблице хендлов процесса, объекты процесса храняться в АП процесса. При закрытии процесса уничтожается АП, закрываются хендлы. Файлмаппинг же никак на виртуальной памяти не завязан, отсюда и нет необходимости хранить хендлы для него.
Я наврал немного, CreateFileMapping не выделяет вирт. адреса ни в каком процессе(разве что за исключением выделения места под внутренние нужды, объект секция и тд), а MapViewOfFile выделяет.
неправдо. api: ZwMakeTemporaryObject, ZwMakePermanentObject. ну, и как уже сказали, OBJ_PERMANENT флаг в OBJECT_ATTRIBUTES. на всё это нужны права.