VirtualProtectEx

指定したプロセスの仮想アドレス空間内のコミット済みページ領域の保護を変更する。

VirtualProtectEx hProcess, lpAddress, dwSize, flNewProtect, lpflOldProtect

hProcess : [intptr] メモリ保護を変更するプロセスのハンドル。**PROCESS_VM_OPERATION** アクセス権が必要。詳細は Process Security and Access Rights を参照。
lpAddress : [intptr] アクセス保護属性を変更するページ領域のベースアドレスへのポインタ。指定領域内の全ページは、VirtualAlloc / VirtualAllocEx を MEM_RESERVE で呼び出して予約された同一予約領域内になければならない。VirtualAlloc / VirtualAllocEx の別呼び出しで予約された隣接予約領域をまたぐことはできない。
dwSize : [int] アクセス保護属性を変更する領域のサイズ(バイト単位)。影響を受けるページ範囲には lpAddress から (lpAddress+dwSize) の範囲に 1 バイト以上を含むすべてのページが含まれる。よってページ境界をまたぐ 2 バイト範囲は両方のページの保護属性を変更させる。
flNewProtect : [int] メモリ保護オプション。メモリ保護定数のいずれかを指定できる。マップビューに対しては、ビューマップ時に指定したアクセス保護と互換性がある必要がある (MapViewOfFile / MapViewOfFileEx / MapViewOfFileExNuma を参照)。
lpflOldProtect : [var] 指定領域内の最初のページの直前アクセス保護を受け取る変数へのポインタ。NULL または有効な変数を指さない場合、関数は失敗する。

(プラグイン / モジュール : kernel32.dll)

解説

指定したプロセスの仮想アドレス空間内のコミット済みページ領域の保護を変更する。

[戻り値]
関数が成功した場合、戻り値は 0 以外である。関数が失敗した場合、戻り値は 0 となる。拡張エラー情報を取得するには
GetLastError を呼ぶ。

[備考]

アクセス保護値はコミット済みページにのみ設定できる。指定領域内のいずれかのページがコミットされていない場合、関数は失敗し、領域内のいずれのページのアクセス保護も変更せずに戻る。**PAGE_GUARD**
保護修飾子はガードページを設定する。ガードページは一度限りのアクセス警報として動作する。詳細は Creating Guard Pages
を参照。GlobalAlloc / HeapAlloc / LocalAlloc で割り当てたメモリブロックの保護を
VirtualProtectEx で変更するのは避けるのがよい。1
ページ上に複数メモリブロックが存在し得るためである。ヒープマネージャはヒープ内全ページが少なくとも読み書きアクセスを許可していると仮定する。実行可能領域として保護する場合、呼び出し側はコード配置後に
FlushInstructionCache
を呼んでキャッシュ整合性を確保する責任を負う。さもなければ新しい実行可能領域からの実行は予測不能な結果を生む可能性がある。

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs