xref: /aosp_15_r20/external/lzma/CPP/Windows/FileMapping.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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