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