Im Wesentlichen bin ich auf der Suche nach einer Funktion, die für Kernel-Modus tun könnte, was VirtualProtect
für den Benutzermodus tut.So stellen Sie den Schutz der Speicherregion im Kernel-Modus unter Windows 7 ein
Ich reserviere Speicher mit einer Logik, die durch den folgenden vereinfachten Code veranschaulicht wird.
PMDL mdl = MmAllocatePagesForMdl
(
LowAddress,
HighAddress,
SkipAddress,
size
);
ULONG flags = NormalPagePriority | MdlMappingNoExecute | MdlMappingNoWrite;
PVOID ptr = MmGetSystemAddressForMdlSafe
(
mdl,
flags
);
Die MdlMappingNoExecute
und MdlMappingNoWrite
Flaggen werden nur auf Win8 + Wirkung.
Darüber hinaus kann nur MmGetSystemAddressForMdlSafe
ich kann nicht NoAccess
Schutz für den Speicherbereich zuweisen.
Gibt es zusätzliche oder alternative API-s, die ich verwenden könnte, um den Seitenschutz des zugewiesenen Speichers zu ändern?
Ein Hack würde auch tun, da diese Funktionalität derzeit im Produktionscode nicht verwendet wird.
Danke. Wissen Sie vielleicht, können diese APIs auch auf nicht ausgelagerte und System (nicht prozessgebundene) Speicher angewendet werden? –
* Die 'ZwAllocateVirtualMemory'-Routine reserviert, legt fest, oder beides, eine Region von Seiten innerhalb des virtuellen Adressraums des Benutzermodus eines bestimmten Prozesses * - https://msdn.microsoft.com/en-us/library/windows/ hardware/ff566416% 28v = vs.85% 29.aspx Während Ihre Antwort immer noch nützlich ist, fragt die Frage derzeit implizit nach einer Lösung für nicht ausgelagerten Speicher, da 'MmAllocatePagesForMdl' nicht ausgelagerten Speicherzuweisung generiert - https://msdn.microsoft. com/de-us/library/windows/hardware/ff554482 (v = vs.85) .aspx –
Es wäre immer noch interessant zu wissen, ob die undokumentierte 'ZwProtectVirtualMemory' API in der Lage ist, auf nicht ausgelagertem Speicher zu arbeiten und wie sie sich von' unterscheidet MmProtectMdlSystemAddress'? Ich denke, ich verstehe, dass 'NtProtectVirtualMemory' für Benutzer-Modus-Speicher ist und mit Argumenten fehlschlagen wird, die auf Systemspeicherbereich verweisen. Der Unterschied zwischen 'Zw' und' Mm' APIs ist interessant, da man im Internet verschiedene Hacks finden kann, um 'ZwProtectVirtualMemory' API aufzurufen. Wenn nicht für bestimmte Vorteile ... dann nehme ich an, dass diese Hacks nicht gemacht worden wären? –