VirtualFreeEx

指定したプロセスの仮想アドレス空間内のメモリ領域を解放、コミット解除、または解放とコミット解除の両方を行う。

VirtualFreeEx hProcess, lpAddress, dwSize, dwFreeType

hProcess : [intptr] プロセスのハンドル。本関数はそのプロセスの仮想アドレス空間内のメモリを解放する。ハンドルは PROCESS_VM_OPERATION アクセス権を持つ必要がある。詳細は Process Security and Access Rights を参照。
lpAddress : [intptr] 解放するメモリ領域の開始アドレスへのポインタ。dwFreeType が MEM_RELEASE の場合、lpAddress は領域予約時に VirtualAllocEx が返したベースアドレスでなければならない。
dwSize : [int] 解放するメモリ領域のサイズ(バイト単位)。
dwFreeType : [int] 

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

解説

指定したプロセスの仮想アドレス空間内のメモリ領域を解放、コミット解除、または解放とコミット解除の両方を行う。

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

[備考]
プロセス仮想アドレス空間内の各メモリページはページ状態を持つ。VirtualFreeEx
はコミット済み・未コミットの混在状態のページ範囲のコミットを解除できる。これにより各ページの現在のコミット状態を事前に判定せずに範囲全体のコミットを解除できる。ページのコミット解除はその物理ストレージ
(メモリまたはディスク上のページファイル) を解放する。コミット解除されたが解放されていないページの状態は予約状態に変わる。後に
VirtualAllocEx でコミットしたり、VirtualFreeEx
で解放できる。予約ページからの読み書き試行はアクセス違反例外となる。VirtualFreeEx
は予約・コミット混在の領域も解放できる。VirtualAllocEx
で予約された領域全体は同時に解放されなければならない。解放されたページの状態は free
に変わり、以後の割り当て操作で利用可能となる。メモリが解放またはコミット解除された後はそのメモリを参照してはならず、その情報は永久に失われる。フリーページからの読み書き試行はアクセス違反例外となる。情報を保持する必要があるならコミット解除や解放を行わないこと。VirtualFreeEx
は AWE
領域でも使用でき、領域のアドレス空間を解放する際に物理ページマッピングを無効化するが、物理ページ自体は削除されずアプリケーションは引き続き使用できる。物理ページを解放するには
FreeUserPhysicalPages
を明示的に呼ぶ必要がある。プロセス終了時にはすべてのリソースが自動的にクリーンアップされる。**Windows 10 version
1709 以降と Windows 11**: エンクレーブを削除するには DeleteEnclave を呼ぶ。VBS エンクレーブは
VirtualFree / VirtualFreeEx では削除できない。SGX エンクレーブは引き続き VirtualFree /
VirtualFreeEx で削除できる。**Windows 10 version 1507/1511/1607/1703**:
エンクレーブを削除するには VirtualFree / VirtualFreeEx を呼び、_lpAddress_
にエンクレーブのベースアドレス、_dwSize_ に 0、_dwFreeType_ に MEM_RELEASE を指定する。

情報

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