CreateFileMapping vs OpenFileMapping

Discussion in 'WASM.WIN32' started by Quark, Mar 7, 2009.

  1. Quark

    Quark New Member

    Blog Posts:
    0
    Joined:
    Aug 7, 2007
    Messages:
    211
    так мапится:
    Code (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
    так не мапится:
    Code (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

    Blog Posts:
    0
    Joined:
    Sep 29, 2005
    Messages:
    2,566
    Quark
    Не совсем правильно поставлен вопрос. Скорее вопрос в том, почему в первом случае не возникает проблем. Ведь для создания FileMapping'а с правами WRITECOPY необходимы права доступа к файлу GENERIC_WRITE.
    Насчёт второго варианта... Вы бы глянули в MSDN, что в OpenFileMapping первым параметром передаётся...
     
  3. mrcrown

    mrcrown Member

    Blog Posts:
    0
    Joined:
    Jan 18, 2008
    Messages:
    227
    Я вот не доганяю:
    Code (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

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    такое слово - "пример" есть.
    наверняка это не в одной программе, и все гораздо сложней.
     
  5. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Лучше натив использовать, в винапи возможны подобные ошибки, смотри параметры.
     
  6. Quark

    Quark New Member

    Blog Posts:
    0
    Joined:
    Aug 7, 2007
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Aug 7, 2007
    Messages:
    211
    + 1
     
  8. Quark

    Quark New Member

    Blog Posts:
    0
    Joined:
    Aug 7, 2007
    Messages:
    211
    а может лучше драйвер написать? рулить оттуда страницами.
    прошу прощения, но вопрос поставлен достаточно однозначно.
     
  9. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Quark
    NTSTATUS код в стулию, нужно ведь знать причину ошибки. Мсдн нет желания окрывать.
     
  10. Quark

    Quark New Member

    Blog Posts:
    0
    Joined:
    Aug 7, 2007
    Messages:
    211
    ZwMapViewOfSection: 0хС0000022 - ACCESS_DENIED
     
  11. disaster

    disaster New Member

    Blog Posts:
    0
    Joined:
    Feb 11, 2009
    Messages:
    12
    OpenFileMapping(FILE_MAP_COPY, 0, wz_mapname);
    работает
     
  12. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Quark
    Верно сказал l_inc.
     
  13. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    Quark
    FILE_MAP_* а не PAGE_* ожидают
     
  14. Clerk

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Code (Text):
    1.     invoke OpenFileMapping, GENERIC_READ, 0, addr wz_mapname
     
  15. Quark

    Quark New Member

    Blog Posts:
    0
    Joined:
    Aug 7, 2007
    Messages:
    211
    Ага. Пасиб. Закрыто.