ファイルマッピングのビューを呼び出し側プロセスのアドレス空間にマップする。
MapViewOfFile hFileMappingObject, dwDesiredAccess, dwFileOffsetHigh, dwFileOffsetLow, dwNumberOfBytesToMap
hFileMappingObject : [intptr] ファイルマッピングオブジェクトのハンドル。CreateFileMapping 関数および OpenFileMapping 関数がこのハンドルを返す。 dwDesiredAccess : [int] ファイルマッピングオブジェクトへのアクセスの種類。これはページのページ保護を決定する。 dwFileOffsetHigh : [int] ビューの開始位置となるファイルオフセットの上位 DWORD。 dwFileOffsetLow : [int] ビューの開始位置となるファイルオフセットの下位 DWORD。上位と下位のオフセットの組み合わせは、ファイルマッピング内のオフセットを指定しなければならない。また、システムのメモリ確保粒度と一致しなければならない。すなわちオフセットは確保粒度の倍数でなければならない。システムのメモリ確保粒度を得るには、SYSTEM_INFO 構造体のメンバを埋める GetSystemInfo 関数を使う。 dwNumberOfBytesToMap : [int] ビューにマップするファイルマッピングのバイト数。すべてのバイトは CreateFileMapping で指定された最大サイズ以内でなければならない。この引数が 0 の場合、マッピングは指定オフセットからファイルマッピングの末尾まで広がる。
(プラグイン / モジュール : kernel32.dll)
ファイルマッピングのビューを呼び出し側プロセスのアドレス空間にマップする。 [戻り値] 関数が成功した場合、戻り値はマップされたビューの先頭アドレスである。関数が失敗した場合、戻り値は NULL である。拡張エラー情報を取得するには GetLastError を呼ぶ。 [備考] ファイルをマップすると、ファイルの指定された部分が呼び出し側プロセスのアドレス空間内に見えるようになる。アドレス空間より大きなファイルの場合、ファイルデータの一部分ずつしか同時にマップできない。最初のビューを使い終えたら、マップ解除して新しいビューをマップできる。ビューのサイズを得るには VirtualQuery 関数を使う。ファイルの複数のビュー(またはファイルマッピングオブジェクトとそのマップされたファイル)は、指定時点で同じデータを含むなら整合している。これは、同じファイルに裏付けられた任意のファイルマッピングオブジェクトからビューが派生する場合に発生する。プロセスは DuplicateHandle 関数を使ってファイルマッピングオブジェクトのハンドルを他のプロセスへ複製できるし、別のプロセスは OpenFileMapping 関数を使って名前でファイルマッピングオブジェクトを開くこともできる。1 つの重要な例外を除き、同じファイルに裏付けられた任意のファイルマッピングオブジェクトから派生したファイルビューは、特定時点で整合もしくは同一である。プロセス内のビュー間でも、異なるプロセスがマップしたビュー間でも、整合性は保証される。例外はリモートファイルに関するものである。MapViewOfFile はリモートファイルでも動作するが、それらの整合性は保たない。例えば、2 台のコンピュータがファイルを書き込み可能としてマップし、両方が同じページを変更した場合、各コンピュータは自身のそのページへの書き込みしか見えない。ディスク上でデータが更新されても、マージはされない。ファイルのマップされたビューは、ReadFile や WriteFile 関数でアクセスしているファイルとの整合性は保証されない。メモリマップファイルにポインタを格納してはならない。任意のアドレスでマッピングを使えるように、ファイルマッピングの基底からのオフセットを格納すること。EXCEPTION_IN_PAGE_ERROR 例外に備えるため、ページファイル以外のメモリマップファイルビューへ書き込んだり読み込んだりするコードは構造化例外処理で保護すること。詳細は「ファイルビューからの読み書き」を参照。マップされたビューを介してファイルを変更する場合、最終更新タイムスタンプが自動的には更新されないことがある。必要であれば、呼び出し側は SetFileTime を使ってタイムスタンプを設定すべきである。ファイルマッピングオブジェクトがページングファイルに裏付けられている場合(CreateFileMapping が hFile 引数 INVALID_HANDLE_VALUE で呼ばれた場合)、ページングファイルはマッピング全体を保持できる十分な大きさでなければならない。そうでなければ MapViewOfFile は失敗する。ページングファイルに裏付けられたファイルマッピングオブジェクト内のページの初期内容は 0 である。ページングファイルに裏付けられたファイルマッピングオブジェクトの作成時、呼び出し側は MapViewOfFile がページの予約と確定を同時に行う (SEC_COMMIT) か、単に予約のみを行う (SEC_RESERVE) かを指定できる。ファイルをマップすると、マップされた仮想アドレス範囲全体はプロセス内の他の確保には利用できなくなる。予約された範囲からページが確定された後は、VirtualFree で解放したり未確定にしたりすることはできない。予約および確定されたページは、ビューがマップ解除されファイルマッピングオブジェクトが閉じられた時点で解放される。詳細は UnmapViewOfFile および CloseHandle 関数を参照。実行権限付きのファイルを持つためには、アプリケーションは PAGE_EXECUTE_READWRITE または PAGE_EXECUTE_READ で CreateFileMapping を呼び、その後 FILE_MAP_EXECUTE | FILE_MAP_WRITE または FILE_MAP_EXECUTE | FILE_MAP_READ で MapViewOfFile を呼ばなければならない。Windows Server 2012 では、この関数は次のテクノロジによってサポートされる。 (以下省略)
| プラグイン / モジュール | 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 |