VirtualLock

プロセスの仮想アドレス空間内の指定領域を物理メモリにロックし、その領域への以後のアクセスがページフォールトを起こさないようにする。

VirtualLock lpAddress, dwSize

lpAddress : [intptr] ロックするページ領域のベースアドレスへのポインタ。
dwSize : [int] ロックする領域のサイズ(バイト単位)。影響を受けるページ範囲には lpAddress から lpAddress+dwSize の範囲に 1 バイト以上を含むすべてのページが含まれる。よってページ境界をまたぐ 2 バイト範囲は両方のページをロックさせる。

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

解説

プロセスの仮想アドレス空間内の指定領域を物理メモリにロックし、その領域への以後のアクセスがページフォールトを起こさないようにする。

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

[備考]
指定領域のすべてのページはコミット済みでなければならない。PAGE_NOACCESS
で保護されたメモリはロックできない。ページを物理メモリにロックすると、利用可能 RAM
が減り他の重要ページがページファイルへスワップされ、システム性能が低下することがある。各 Windows
バージョンはプロセスがロックできるページ最大数の制限を持つ。これは性能劣化を避けるため意図的に小さく設定されている。より多くのページをロックする必要があるアプリケーションは、まず
SetProcessWorkingSetSize
で最小・最大ワーキングセットサイズを増やす必要がある。プロセスがロックできるページの最大数は最小ワーキングセットのページ数から少しのオーバーヘッドを引いた数に等しい。プロセスがロックしたページはアンロックまたはプロセス終了まで物理メモリに残る。これらのページはロック中、ページファイルに書き込まれないことが保証される。ロック領域を解除するには
VirtualUnlock を使う。プロセス終了時にロックは自動解除される。本関数は GlobalLock / LocalLock
とは異なり、ロックカウントの増加やハンドル→ポインタ変換は行わない。仮想ページにロックカウントは存在しないので、領域のアンロックに
VirtualUnlock を複数回呼ぶ必要は決してない。

情報

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