В общем проблема большая для такого прогера как я. Пробовал с помощью NtAllocateVirtualMemory зарезервировать память в процессе. Как только не юзал функцию и с (HANDLE)(-1) и NtOpenProcess пробовал. Ошибка C0000005h. То есть не правильный указатель как я понял. Дальше уже пишу: PVOID AllocMemRing3(ULONG Size) { PVOID BaseAddress=NULL; ULONG RegionSize=Size; HANDLE hHandle=(HANDLE)GetCurrentProcessXP; if (NtAllocateVirtualMemory(hHandle,&BaseAddress,0,&RegionSize,MEM_RESERV E,4)!=STATUS_SUCCESS) { return NULL; } if (RegionSize<Size) { NtFreeVirtualMemory(hHandle,&BaseAddress,&RegionSize,MEM_RESERVE); return NULL; } return BaseAddress; } И NtAllocateVirtualMemory((HANDLE)(-1)...) тоже пробовал. Я че то не могу понять. Помогите плиз. В чем там дело с этой функцией, если кто знает.
Как я понял, ты это делаешь из драйвера, а адрес NtAllocateVirtualMemory получаешь через SDT. Если да, то указатели BaseAddress и RegionSize должны находиться не в стеке ядра, а в юзермодном адресном пространстве, либо придется менять PerivousMode. Рекомендую не выделять память через NtAllocateVirtualMemory, а мапить ядерную память (из пула) в юзермод через MDL. Но этот метод не годиться тогда, когда требуется много памяти (т.к. при этом обязательно нужно использовать NonPagedPool), хотя работает он быстрее NtAllocateVirtualMemory. Еще можешь попробовать вызвать NtAllocateVirtualMemory не по указателю из SDT, а через int 2E. При этом обработчик KiSystemService сам установит PerivousMode.
Вот функции получения хендла текущего процесса, если нету у тебя. Пробовал только в XP. Вроде хендлы совпали. В 2K просто написал, что было в тонне тамошнего мусора, не проверял. ULONG GetCurrentProcess2K(VOID) { ULONG ProcessHandle; __asm { mov eax,fs:[0x124] mov eax,[eax+0x44] mov eax,[eax+0x128] mov eax,[eax+0x14] shl eax,2 mov ProcessHandle,eax } return ProcessHandle; } ULONG GetCurrentProcessXP(VOID) { ULONG ProcessHandle; __asm { mov eax,fs:[0x124] mov eax,[eax+0x44] mov eax,[eax+0xC4] mov eax,[eax+0x30] mov ProcessHandle,eax } return ProcessHandle; }