指定したプロセスの仮想アドレス空間内のメモリ領域を解放、コミット解除、または解放とコミット解除の両方を行う。
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 |
| URL | https://github.com/inovia/IronHSP |
| 備考 | Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。 |
| タイプ | 拡張命令 |
| グループ | Win32API |
| 対応環境 |
|
| hs ファイル | hsphelp\win32_kernel32_gen2.hs |