关于内存映像文件的操作,要注意的函数是
LPVOID MapViewOfFile(
HANDLE hFileMappingObject,
DWORD dwDesiredAccess,
DWORD dwFileOffsetHigh,
DWORD dwFileOffsetLow,
DWORD dwNumberOfBytesToMap
DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, 这两个参数决定了从文件的什么位置开始映射, 但是并不是任何位置都可以映射的,也就是说这两个参数合起来的64位值并不是任意的, 这个值要是dwAllocationGranularity
的整数倍,dwAllocationGranularity可以通过GetSystemInfo函数取得(SYSTEM_INFO结构中的dwAllocationGranularity字段).
最后一个参数DWORD dwNumberOfBytesToMap决定了要映射的大小,最好也是dwAllocationGranularity
的整数倍,但是这个值加上前面讲的开始位置不能大于文件的整个大小, 否则会映射失败.
下面举个例子: