1*f6dc9357SAndroid Build Coastguard Worker // Windows/FileMapping.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_WINDOWS_FILE_MAPPING_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_WINDOWS_FILE_MAPPING_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../Common/MyTypes.h" 7*f6dc9357SAndroid Build Coastguard Worker 8*f6dc9357SAndroid Build Coastguard Worker #include "Handle.h" 9*f6dc9357SAndroid Build Coastguard Worker 10*f6dc9357SAndroid Build Coastguard Worker namespace NWindows { 11*f6dc9357SAndroid Build Coastguard Worker 12*f6dc9357SAndroid Build Coastguard Worker class CFileMapping: public CHandle 13*f6dc9357SAndroid Build Coastguard Worker { 14*f6dc9357SAndroid Build Coastguard Worker public: Create(DWORD protect,UInt64 maxSize,LPCTSTR name)15*f6dc9357SAndroid Build Coastguard Worker WRes Create(DWORD protect, UInt64 maxSize, LPCTSTR name) 16*f6dc9357SAndroid Build Coastguard Worker { 17*f6dc9357SAndroid Build Coastguard Worker _handle = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, protect, (DWORD)(maxSize >> 32), (DWORD)maxSize, name); 18*f6dc9357SAndroid Build Coastguard Worker return ::GetLastError(); 19*f6dc9357SAndroid Build Coastguard Worker } 20*f6dc9357SAndroid Build Coastguard Worker Open(DWORD desiredAccess,LPCTSTR name)21*f6dc9357SAndroid Build Coastguard Worker WRes Open(DWORD 22*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE 23*f6dc9357SAndroid Build Coastguard Worker desiredAccess 24*f6dc9357SAndroid Build Coastguard Worker #endif 25*f6dc9357SAndroid Build Coastguard Worker , LPCTSTR name) 26*f6dc9357SAndroid Build Coastguard Worker { 27*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE 28*f6dc9357SAndroid Build Coastguard Worker WRes res = Create(PAGE_READONLY, 0, name); 29*f6dc9357SAndroid Build Coastguard Worker if (res == ERROR_ALREADY_EXISTS) 30*f6dc9357SAndroid Build Coastguard Worker return 0; 31*f6dc9357SAndroid Build Coastguard Worker Close(); 32*f6dc9357SAndroid Build Coastguard Worker if (res == 0) 33*f6dc9357SAndroid Build Coastguard Worker res = ERROR_FILE_NOT_FOUND; 34*f6dc9357SAndroid Build Coastguard Worker return res; 35*f6dc9357SAndroid Build Coastguard Worker #else 36*f6dc9357SAndroid Build Coastguard Worker _handle = ::OpenFileMapping(desiredAccess, FALSE, name); 37*f6dc9357SAndroid Build Coastguard Worker if (_handle != NULL) 38*f6dc9357SAndroid Build Coastguard Worker return 0; 39*f6dc9357SAndroid Build Coastguard Worker return ::GetLastError(); 40*f6dc9357SAndroid Build Coastguard Worker #endif 41*f6dc9357SAndroid Build Coastguard Worker } 42*f6dc9357SAndroid Build Coastguard Worker Map(DWORD desiredAccess,UInt64 fileOffset,SIZE_T numberOfBytesToMap)43*f6dc9357SAndroid Build Coastguard Worker LPVOID Map(DWORD desiredAccess, UInt64 fileOffset, SIZE_T numberOfBytesToMap) 44*f6dc9357SAndroid Build Coastguard Worker { 45*f6dc9357SAndroid Build Coastguard Worker return ::MapViewOfFile(_handle, desiredAccess, (DWORD)(fileOffset >> 32), (DWORD)fileOffset, numberOfBytesToMap); 46*f6dc9357SAndroid Build Coastguard Worker } 47*f6dc9357SAndroid Build Coastguard Worker 48*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE Map(DWORD desiredAccess,UInt64 fileOffset,SIZE_T numberOfBytesToMap,LPVOID baseAddress)49*f6dc9357SAndroid Build Coastguard Worker LPVOID Map(DWORD desiredAccess, UInt64 fileOffset, SIZE_T numberOfBytesToMap, LPVOID baseAddress) 50*f6dc9357SAndroid Build Coastguard Worker { 51*f6dc9357SAndroid Build Coastguard Worker return ::MapViewOfFileEx(_handle, desiredAccess, (DWORD)(fileOffset >> 32), (DWORD)fileOffset, numberOfBytesToMap, baseAddress); 52*f6dc9357SAndroid Build Coastguard Worker } 53*f6dc9357SAndroid Build Coastguard Worker #endif 54*f6dc9357SAndroid Build Coastguard Worker }; 55*f6dc9357SAndroid Build Coastguard Worker 56*f6dc9357SAndroid Build Coastguard Worker class CFileUnmapper 57*f6dc9357SAndroid Build Coastguard Worker { 58*f6dc9357SAndroid Build Coastguard Worker const void *_data; 59*f6dc9357SAndroid Build Coastguard Worker public: CFileUnmapper(const void * data)60*f6dc9357SAndroid Build Coastguard Worker CFileUnmapper(const void *data) : _data(data) {} ~CFileUnmapper()61*f6dc9357SAndroid Build Coastguard Worker ~CFileUnmapper() { ::UnmapViewOfFile(_data); } 62*f6dc9357SAndroid Build Coastguard Worker }; 63*f6dc9357SAndroid Build Coastguard Worker 64*f6dc9357SAndroid Build Coastguard Worker } 65*f6dc9357SAndroid Build Coastguard Worker 66*f6dc9357SAndroid Build Coastguard Worker #endif 67