CreateFileMapping vs OpenFileMapping

Тема в разделе "WASM.WIN32", создана пользователем Quark, 7 мар 2009.

  1. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    так мапится:
    Код (Text):
    1. h_fiule = CreateFile(wz_fname, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    2. f_size  = GetFileSize(h_file, 0);
    3. h_map   = CreateFileMapping(h_file, 0, PAGE_WRITECOPY, 0, 0, wz_mapname);
    4. p       = MapViewOfFileEx(h_map, FILE_MAP_COPY, 0, 0, fsize, 0);
    5. // success
    так не мапится:
    Код (Text):
    1. h_fiule = CreateFile(wz_fname, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    2. f_size  = GetFileSize(h_file, 0);
    3. h_map   = CreateFileMapping(h_file, 0, PAGE_WRITECOPY, 0, 0, wz_mapname);
    4. h_map   = OpenFileMapping(PAGE_WRITECOPY, 0, wz_mapname);
    5. p       = MapViewOfFileEx(h_map, FILE_MAP_COPY, 0, 0, fsize, 0); // отказано в доступе
    почему возникают проблемы, ведь права одни и теже?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Quark
    Не совсем правильно поставлен вопрос. Скорее вопрос в том, почему в первом случае не возникает проблем. Ведь для создания FileMapping'а с правами WRITECOPY необходимы права доступа к файлу GENERIC_WRITE.
    Насчёт второго варианта... Вы бы глянули в MSDN, что в OpenFileMapping первым параметром передаётся...
     
  3. mrcrown

    mrcrown Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    227
    Я вот не доганяю:
    Код (Text):
    1. h_map   = CreateFileMapping(h_file, 0, PAGE_WRITECOPY, 0, 0, wz_mapname);
    2. h_map   = OpenFileMapping(PAGE_WRITECOPY, 0, wz_mapname);
    Создается ММФ и тут же он же и открывается. Вопрос: НАФИГА? Если ыт его только создал и уже можешь пользоваться хендлом...
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    такое слово - "пример" есть.
    наверняка это не в одной программе, и все гораздо сложней.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Лучше натив использовать, в винапи возможны подобные ошибки, смотри параметры.
     
  6. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    MSDN:

    PAGE_WRITECOPY
    Sets copy-on-write access.

    The files that the hFile parameter specifies must be created with the GENERIC_READ access right.
     
  7. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    + 1
     
  8. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    а может лучше драйвер написать? рулить оттуда страницами.
    прошу прощения, но вопрос поставлен достаточно однозначно.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Quark
    NTSTATUS код в стулию, нужно ведь знать причину ошибки. Мсдн нет желания окрывать.
     
  10. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    ZwMapViewOfSection: 0хС0000022 - ACCESS_DENIED
     
  11. disaster

    disaster New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2009
    Сообщения:
    12
    OpenFileMapping(FILE_MAP_COPY, 0, wz_mapname);
    работает
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Quark
    Верно сказал l_inc.
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Quark
    FILE_MAP_* а не PAGE_* ожидают
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1.     invoke OpenFileMapping, GENERIC_READ, 0, addr wz_mapname
     
  15. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Ага. Пасиб. Закрыто.