Ничего нету по eax после вызова MapViewOfFile

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

  1. sandis

    sandis New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2009
    Сообщения:
    33
    Код (Text):
    1. invoke CreateFile,addr filename,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
    2.     .IF eax != NULL
    3.         mov hFile,eax
    4.         invoke CreateFileMapping,hFile,NULL,PAGE_READWRITE,0,0,NULL
    5.    ;    .IF eax == NULL
    6.    ;       call GetLastError
    7.    ;    .endif
    8.         mov hMapping,eax
    9.         invoke MapViewOfFile,hMapping,PAGE_EXECUTE_READWRITE ,0,0,0
    10.    ;     call GetLastError
    11.         mov hMap,eax
    12.     .ENDIF
    13.     mov esi,hMap
    В результате hMap !=0 должен быть указатель на файл, но при переходе туда ctrl+G в ольке дамп пустой( имено пустой а не 0 )
     
  2. sandis

    sandis New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2009
    Сообщения:
    33
    Скрин http://img89.imageshack.us/my.php?image=99401952qr1.jpg
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    А надо бы FILE_MAP_WRITE или FILE_MAP_ALL_ACCESS ;)

    PS: CreateFile в сл.ошибки возвращает не NULL, а INVALID_HANDLE_VALUE
     
  4. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Проекция у тебя создается с правами PAGE_EXECUTE_READWRITE, когда ни CreateFile и CreateFileMapping открывались только для чтения и записи без права "EXECUTE". Да и вообще, как я знаю, нет такого права "PAGE_EXECUTE_READWRITE", а из похожих есть только FILE_MAP_READ и FILE_MAP_WRITE.

    Попробуй 'PAGE_EXECUTE_READWRITE' заменить на 'FILE_MAP_READ or FILE_MAP_WRITE'.
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    извините за столь обширную цитату, но что из этого не понятно!
    откуда взялось, то что явно не указано в документации. А то, что константа принадлежит к группе прав доступа, не говорит о том, что ее можно передавать во все функции!
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    max7C4
    Не понятно какое отношение flProtect из CreateFileMapping имеет к dwDesiredAccess из MapViewOfFile, да и цитата несколько устарела, т.к. с XP SP2 в CreateFileMapping можно задавать и PAGE_EXECUTE_READ\READWRITE

    PS: А вообще конечно MapViewOfFile ведет себя как-то странно - если не установлен ни один из флагов FILE_MAP_WRITE=1 или FILE_MAP_READ=2 , то вместо того, чтобы просто обломить нерадивого прогера и выдать NULL, зачем то создается проекция с PAGE_NOACESS со всеми вытекающими..
     
  7. sandis

    sandis New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2009
    Сообщения:
    33
    Помогло спс.
     
  8. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    А предыдущий пост #3 значит оказался непосильным на ночь глядя. Ну ес-но, утро вечера мудренее :lol:
     
  9. sandis

    sandis New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2009
    Сообщения:
    33
    )) при FILE_MAP_ALL_ACCESS MapViewOfFile возращает 0
     
  10. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Странно, т.к. в мсдн черным по белому сказано:
    Вот и верь после этого людям :)
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Для натива конкретнее будет:
     
  12. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    leo
    Не переживай, все ошибаются. А M$ особенно часто :)