Der Arbeitsspeicher wird von modernen Betriebssystemen eigentlich immer über
Paging verwaltet. Dabei hat jede Page eine feste Größe und verschiedene Attribute. Dazu gehört unter Anderem auch die Zugriffsrechte. Diese für eine oder mehrere Pages zu ändern ist Sinn und Zweck der

-Funktion unter Windows. Wenn eine Page also beispielsweise nur lesbar ist, kann man sie mit VirtualProtect auch beschreibbar und / oder ausführbar machen. Ist eine Page aber nicht allokiert, also ist mit der virtuellen Page keine Physikalische verknüpft und die entsprechende Adresse daher nicht lesbar oder beschreibbar, dann hilft auch VirtualProtect nichts, dann muss erst mithilfe von VirtualAlloc Speicher allokiert werden.
Den Zustand (reserviert, allokiert oder nichts) und die Attribute (u.A. Zugriffsrechte) einer Page kannst du mithilfe von

abfragen.
Beachte, dass immer alles pageweise geschieht. Du kannst damit nicht nur die Rechte eines Bytes ändern oder auf dieser Ebene nur ein paar Byte allokieren.
Dem entsprechend kannst du VirtualProtect durchaus auf dein Problem anwenden, wenn es lediglich an den Zugriffsrechten mangelt.
Generell ist hierbei MSDN dein bester Freund, den du auch nutzen solltest, da es die Funktionen und Parameter recht gut erklärt.
Hoffe, dass ich helfen konnte
Jeoni