вопрос по CreateFileMapping

Тема в разделе "WASM.WIN32", создана пользователем ptr, 2 июн 2010.

  1. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    можно ли сделать следующее
    1)в программе создаю проекцию для данных(CreateFileMapping)
    2)выхожу из программы(ExitProcess)
    3)запускаю ехе, открываю проекцию и работаю с ней(OpenFileMapping), созданную в п.1
    нужно чтобы созданный объект-проекция не закрывался после выхода.
    спасибо
     
  2. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Нет, так нельзя.
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    если только проецировать файл... и то надо будет флаш делать для сохранения изменений, ну или корректно закрывать отображение...
     
  4. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    ptr,

    Всё, принадлежащее процессу, умирает вместе с ним, не так ли?
     
  5. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    ptr
    >можно ли сделать следующее
    На самом деле можно. При создании объекта нужно указать атрибут OBJ_PERMANENT. Но чтобы вызов прошёл успешно, необходимо обладать привилегией SeCreatePermanent – по умолчанию её нет даже у админов.
    (Нет, конечно можно и хендл секции в какой-нибудь другой процесс сдуплировать – но даже при оставленном в стороне обсуждении чистоты этого метода возникает вопрос о гарантии сохранности процесса-носителя).

    Rel
    Флаш для сохранения изменений не нужен.
     
  6. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Надо попробовать процессы с PID 0 и 4. Возможно, получится.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    если процесс выйдет через ExitProcess без закрытия хендла изменения сохранятся?
     
  8. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Да. Хендлы закроются, отображения размапятся. Изменения сохранятся.

    Вообще говоря, при работе с отображениями нет необходимости хранить хендлы:
    Код (Text):
    1. file = CreateFile();
    2. section = CreateFileMapping(file);
    3. CloseHandle(file);
    4. view = MapViewOfFile(section);
    5. CloseHandle(section);
    6. *PDWORD(view) = 54;
    7. // UnmapViewOfFile(view);   // what
    8. TerminateProcess(self);     // ever
    9.  
    10. // Изменения сохранены.
     
  9. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Немного дополню Sol_Ksacap.

    Пользовательские хендлы храняться в таблице хендлов процесса, объекты процесса храняться в АП процесса. При закрытии процесса уничтожается АП, закрываются хендлы. Файлмаппинг же никак на виртуальной памяти не завязан, отсюда и нет необходимости хранить хендлы для него.
     
  10. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    спасибо за разъяснения.
     
  11. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Я наврал немного, CreateFileMapping не выделяет вирт. адреса ни в каком процессе(разве что за исключением выделения места под внутренние нужды, объект секция и тд), а MapViewOfFile выделяет.
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    неправдо.

    api: ZwMakeTemporaryObject, ZwMakePermanentObject.
    ну, и как уже сказали, OBJ_PERMANENT флаг в OBJECT_ATTRIBUTES. на всё это нужны права.
     
  13. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    ок