CreateFileMapping vs OpenFileMapping

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

  1. Quark

    Quark New Member

    Публикаций:
    0
    так мапится:
    Код (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
    Quark
    Не совсем правильно поставлен вопрос. Скорее вопрос в том, почему в первом случае не возникает проблем. Ведь для создания FileMapping'а с правами WRITECOPY необходимы права доступа к файлу GENERIC_WRITE.
    Насчёт второго варианта... Вы бы глянули в MSDN, что в OpenFileMapping первым параметром передаётся...
     
  3. mrcrown

    mrcrown Member

    Публикаций:
    0
    Я вот не доганяю:
    Код (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. Clerk

    Clerk Забанен

    Публикаций:
    0
    Лучше натив использовать, в винапи возможны подобные ошибки, смотри параметры.
     
  6. Quark

    Quark New Member

    Публикаций:
    0
    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
    + 1
     
  8. Quark

    Quark New Member

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

    Clerk Забанен

    Публикаций:
    0
    Quark
    NTSTATUS код в стулию, нужно ведь знать причину ошибки. Мсдн нет желания окрывать.
     
  10. Quark

    Quark New Member

    Публикаций:
    0
    ZwMapViewOfSection: 0хС0000022 - ACCESS_DENIED
     
  11. disaster

    disaster New Member

    Публикаций:
    0
    OpenFileMapping(FILE_MAP_COPY, 0, wz_mapname);
    работает
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Quark
    Верно сказал l_inc.
     
  13. n0name

    n0name New Member

    Публикаций:
    0
    Quark
    FILE_MAP_* а не PAGE_* ожидают
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Код (Text):
    1.     invoke OpenFileMapping, GENERIC_READ, 0, addr wz_mapname
     
  15. Quark

    Quark New Member

    Публикаций:
    0
    Ага. Пасиб. Закрыто.