基本的に、ユーザーモードでできることをカーネルモードで実行できる関数を探していVirtualProtectます。
次の簡略化されたコードで例示されているロジックを使用して、メモリを割り当てています。
PMDL mdl = MmAllocatePagesForMdl
(
LowAddress,
HighAddress,
SkipAddress,
size
);
ULONG flags = NormalPagePriority | MdlMappingNoExecute | MdlMappingNoWrite;
PVOID ptr = MmGetSystemAddressForMdlSafe
(
mdl,
flags
);
MdlMappingNoExecuteおよびフラグは、MdlMappingNoWriteWin8+ でのみ有効です。
また、MmGetSystemAddressForMdlSafeI のみを使用すると、たとえばNoAccessメモリ領域の保護を割り当てることができません。
割り当てられたメモリのページ保護を変更できるようにするために使用できる追加または代替の API はありますか?
現在、この機能は製品コードでは使用されていないため、ハッキングも行われます。