Nur, weil die Funktion einen Pointer erwartet, heißt das nicht, dass du einen Pointer deklarieren sollst. Der Pointer soll auf eine Struktur zeigen (also realen Speicher), die die Informationen über eine Page liefert, in der die angegebene Adresse (bei dir 0, das wird nicht funktionieren, da diese nicht im gültigen Adressbereich liegt und somit dort keine Page existieren kann) liegt.

Code:
MEMORY_BASIC_INFORMATION Range;
VirtualQueryEx(ProcessId, &WinMain, &Range, sizeof(Range));
Range ist eine konkrete Struktur, nicht bloß ein Pointer, der in's Leere zeigt. Das zweite eine Adresse in der Page (ich habe mal aus Testzwecken meine WinMain genommen, da ich den eigenen Prozess auslese), dann der Pointer auf deine Ausgabestruktur und zum Schluss die Größe ebenjener.