VirtualProtect

呼び出し元プロセスの仮想アドレス空間内のコミット済みページ領域の保護を変更する。(VirtualProtect)

VirtualProtect lpAddress, dwSize, flNewProtect, lpflOldProtect

lpAddress : [intptr] 保護属性を変更するページ領域の開始ページのアドレス。指定領域内の全ページは、MEM_RESERVE で VirtualAlloc/VirtualAllocEx が呼び出されたときに割り当てられた同じ予約領域内に存在しなければならない。
dwSize : [int] 保護属性を変更する領域のサイズ(バイト単位)。lpAddress から (lpAddress+dwSize) の範囲の 1 バイト以上を含むすべてのページが対象となる。
flNewProtect : [int] メモリ保護オプション。Memory Protection Constants のいずれか。マップビューでは、マップ時に指定されたアクセス保護と互換のある値でなければならない。
lpflOldProtect : [var] 指定領域の最初のページの以前のアクセス保護値を受け取る変数へのポインタ。NULL または無効な変数を指す場合、関数は失敗する。

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

解説

呼び出し元プロセスの仮想アドレス空間内のコミット済みページ領域の保護を変更する。(VirtualProtect)

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

[備考]
コミット済みページにのみアクセス保護値を設定できる。指定領域のどれかが非コミットなら関数は失敗し保護を変更しない。PAGE_GUARD
修飾子はガードページを作成する(一度だけのアクセスアラーム)。GlobalAlloc、HeapAlloc、LocalAlloc
で割り当てたブロックの保護を変更するのは避けるべきである(単一ページに複数のブロックが存在しうるため)。実行可能領域を保護する場合、コード配置後に
FlushInstructionCache を呼んでキャッシュコヒーレンシを確保する責任がある。

サンプル逆引き (1)

multimon.hsp

情報

プラグイン / モジュール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