ZwQueryVirtualMemory в win2000 sp4

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

  1. spaun2002

    spaun2002 New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2009
    Сообщения:
    3
    Код (Text):
    1.    PMEMORY_SECTION_NAME secName;
    2.    secName = (PMEMORY_SECTION_NAME)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
    3.         MAX_PATH*sizeof(WCHAR) + sizeof(MEMORY_SECTION_NAME));
    4.    secName->SectionFileName.Length = 0;
    5.    secName->SectionFileName.MaximumLength = MAX_PATH;
    6.  
    7.   NTSTATUS status = ZwQueryVirtualMemory((HANDLE)-1, (LPVOID)0x400000, MemorySectionName,
    8.         secName, MAX_PATH*sizeof(WCHAR) + sizeof(MEMORY_SECTION_NAME), NULL);
    В WinXP и выше status = 0 и ошибок не возникает, но в win2000 возвращается 0xc0000141 (STATUS_INVALID_ADDRESS). Кто-нибудь сталкивался с подобным или знает как решить?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Разве так трудно понять что регион 0x400000 не является файловой проекцией.. Релокация используется, если это база вашего модуля.
     
  3. spaun2002

    spaun2002 New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2009
    Сообщения:
    3
    Странно. Во всех примерах, что видел подсовывали именно hModule для текущего процесса (а это именно 0x400000 в общем случае). Ну я еще подсовывал peb->ImageBaseAddress, но это те же яйца как говорится.
    Ну собственно два вопроса тогда: как вычислить адрес файловой проекции в общем случае
    и почему это все без проблем работает на win > 2k?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    spaun2002
    Вероятно потомучто модуль грузится по адресу в его хидере, без релокации.
    Незачем указывать именно начало региона, допустим любой адрес в его пределах. На асме я бы вместо инструкции push 0x400000 использовал Call $+5. Для вашего компилятора - добавлять ссылку.
     
  5. spaun2002

    spaun2002 New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2009
    Сообщения:
    3
    К сожалению после использования call $+5 по-прежнему не заработала ни GetMappedFileName ни ZwQueryVirtualMemory под win2k :dntknw: