1 // Windows/FileMapping.h
\r
3 #ifndef __WINDOWS_FILEMAPPING_H
\r
4 #define __WINDOWS_FILEMAPPING_H
\r
6 #include "Common/Types.h"
\r
10 namespace NWindows {
\r
12 class CFileMapping: public CHandle
\r
15 WRes Create(DWORD protect, UInt64 maxSize, LPCTSTR name)
\r
17 _handle = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, protect, (DWORD)(maxSize >> 32), (DWORD)maxSize, name);
\r
18 return ::GetLastError();
\r
21 WRes Open(DWORD desiredAccess, LPCTSTR name)
\r
24 WRes res = Create(PAGE_READONLY, 0, name);
\r
25 if (res == ERROR_ALREADY_EXISTS)
\r
29 res = ERROR_FILE_NOT_FOUND;
\r
32 _handle = ::OpenFileMapping(desiredAccess, FALSE, name);
\r
35 return ::GetLastError();
\r
39 LPVOID Map(DWORD desiredAccess, UInt64 fileOffset, SIZE_T numberOfBytesToMap)
\r
41 return ::MapViewOfFile(_handle, desiredAccess, (DWORD)(fileOffset >> 32), (DWORD)fileOffset, numberOfBytesToMap);
\r
45 LPVOID Map(DWORD desiredAccess, UInt64 fileOffset, SIZE_T numberOfBytesToMap, LPVOID baseAddress)
\r
47 return ::MapViewOfFileEx(_handle, desiredAccess, (DWORD)(fileOffset >> 32), (DWORD)fileOffset, numberOfBytesToMap, baseAddress);
\r
56 CFileUnmapper(const void *data) : _data(data) {}
\r
57 ~CFileUnmapper() { ::UnmapViewOfFile(_data); }
\r