Код (Text): PMEMORY_SECTION_NAME secName; secName = (PMEMORY_SECTION_NAME)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PATH*sizeof(WCHAR) + sizeof(MEMORY_SECTION_NAME)); secName->SectionFileName.Length = 0; secName->SectionFileName.MaximumLength = MAX_PATH; NTSTATUS status = ZwQueryVirtualMemory((HANDLE)-1, (LPVOID)0x400000, MemorySectionName, secName, MAX_PATH*sizeof(WCHAR) + sizeof(MEMORY_SECTION_NAME), NULL); В WinXP и выше status = 0 и ошибок не возникает, но в win2000 возвращается 0xc0000141 (STATUS_INVALID_ADDRESS). Кто-нибудь сталкивался с подобным или знает как решить?
Разве так трудно понять что регион 0x400000 не является файловой проекцией.. Релокация используется, если это база вашего модуля.
Странно. Во всех примерах, что видел подсовывали именно hModule для текущего процесса (а это именно 0x400000 в общем случае). Ну я еще подсовывал peb->ImageBaseAddress, но это те же яйца как говорится. Ну собственно два вопроса тогда: как вычислить адрес файловой проекции в общем случае и почему это все без проблем работает на win > 2k?
spaun2002 Вероятно потомучто модуль грузится по адресу в его хидере, без релокации. Незачем указывать именно начало региона, допустим любой адрес в его пределах. На асме я бы вместо инструкции push 0x400000 использовал Call $+5. Для вашего компилятора - добавлять ссылку.
К сожалению после использования call $+5 по-прежнему не заработала ни GetMappedFileName ни ZwQueryVirtualMemory под win2k