Вопрос такой, нужно выделить память в ядре, причём не где попало, а в строго заданном месте по возможности, причём изначально известно, что данные адреса ничем незаняты и памать им передана небыла.
ZwAllocateVirtualMemory может... правда, есть небольшой бэд - она не экспортируется ядром, поэтому адресс нужно искать по индексу таблицы системных сервисов
Вообще то очень хорошо экспортируется, по крайней мере на моей w2k sp4. Но меня смущает там коечто IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN ULONG ZeroBits, IN OUT PULONG RegionSize, IN ULONG AllocationType, IN ULONG Protect ); хэндл какого процесса передавать ? по крайней мере после передачи хэндла одного случайно выбранного процесса с просьбой выделить память в регионе выше 2 Гб был послан с кодом 0xc0000005
The IoAllocateMdl routine allocates an MDL large enough to map a buffer, given its starting address and length. Optionally, this routine associates the MDL with an IRP. Походу оно.