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