tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FileMapping.h (1592B)


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