CreateFileMapping

機能
ファイルマッピングオブジェクトを作成する
Declare Function CreateFileMapping Lib "kernel32.dll" Alias "CreateFileMappingA" _
(ByVal hFile As Long, lpFileMapingAttributes As SECURITY_ATTRIBUTES, _
ByVal flProtect As Long, ByVal dwMaximumSizeHight As Long, ByVal dwMaximumSizeLow As Long, _
ByVal lpName As String) As Long
Declare Function CreateFileMapping Lib "kernel32.dll" Alias "CreateFileMappingA" _
(ByVal hFile As Integer, lpFileMapingAttributes As SECURITY_ATTRIBUTES, _
ByVal flProtect As Integer, ByVal dwMaximumSizeHight As Integer, ByVal dwMaximumSizeLow As Integer, _
ByVal lpName As String) As Integer

HANDLE CreateFileMapping(
HANDLE hFile,
LPSECURITY_ATTRIBUTES lpAttributes,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCTSTR lpName
);
引数
hFile

ファイルマッピングするファイルのハンドル
flProtectと同じ属性であることが望ましい。
&HFFFFFFFFのとき、dwMaximumSizeHightとdwMaximumSizeLowを設定しなければならない
lpFileMapingAttributes
戻ったハンドルを子プロセスが継承できるかどうかを指定するSECURITY_ATTRIBUTES構造体
flProtect
マッピングされたファイルに対する保護属性の設定をする定数の組み合わせ
dwMaximumSizeHight
ファイルマッピングオブジェクトの最大サイズ上位32ビット
dwMaximumSizeLow
同、下位32ビット
lpName
ファイルマッピングを認識するためのオブジェクト名
(「¥」を含むことはできない)
既存の名前付きファイルマッピングオブジェクトと同じ名前の場合は
flProtectで指定した保護措置を受けてアクセスになる。
vbNullStringのとき、名前なしマッピングオブジェクトとなる。
イベント、セマファ、ミューテックス、タイマ、ジョブなどと
同じオブジェクト名のときエラーになる
戻り値
正常終了のとき         ファイルマッピングオブジェクトのハンドル
存在するとき           既存オブジェクトのハンドル
エラーのとき           0
備考
ファイルマッピングオブジェクトのサイズとして
ディスク上のファイルサイズより大きなサイズを指定したとき
ディスク上のファイルはファイルマッピングオブジェクトと同じまで増大する。
増大できないときはエラーになる。

ファイルマッピングオブジェクトはハンドルのコピーや名前を使うことで
複数プロセス間で共有することができる。
ハンドルをコピーするときはDuplicateHandle()関数を使い、
名前を使ってファイルマッピングオブジェクトをオープンする場合は、OpenFileMapping()関数を使う。

ファイルマッピングオブジェクトを作成するために使用したファイルハンドルに対して
オブジェクトハンドルをクローズするまではReadFile()関数やWriteFile()関数などの
ファイルの入出力に関係する関数を使用してはならない。
ファイルマッピングのクローズはCloseHandle()関数を使う。
flProtectの定数

(ページ保護属性)
PAGE_READONLY = &H2                             読み取り専用アクセス
                                                 (hFileはGENERIC_READ属性を持たなければならない)
PAGE_READWRITE = &H4                            読み書きアクセス
                                                 (hFileはGENERIC_WRITEとGENERIC_READ属性を
                                                 持たなければならない)
PAGE_WRITECOPY = &H8                            コピー可能アクセス
                                                 (hFileはGENERIC_READ属性を持たなければならない)

ページ保護属性は次の値と組み合わせることができる。
(セクション保護属性)
SEC_COMMIT = &H8000000                          メモリ内またはディスク上のページングファイル内に
                                                 物理的に割り当てることができる(デフォルト)
SEC_IMAGE = &H1000000                           hFileで指定したファイルは、実行モジュールファイル
                                                 (hFileの属性をそのまま引き継ぐ)
SEC_NOCACHE = &H10000000                        セクションの全てのページはキャッシュしない
                                                 (SEC_RESERVE またはSEC_COMMITも設定する)
SEC_RESERVE = &H4000000                         セクションの全てのページを物理的に割り当てないで
                                                 領域だけを予約する。
                                                 予約した領域はVirtualAlloc()関数を使って確保可能
                                                 (hFile = &HFFFFFFFFのときだけ有効)