-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSharedMem.cpp
59 lines (49 loc) · 1.25 KB
/
SharedMem.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "defines.h"
#include <assert.h>
// class header
#include "SharedMem.h"
bool SharedMem::init(const char* pname, const size_t psize, const bool clearMemory)
{
initMapping(pname, psize, clearMemory);
return (buffer != nullptr);
}
SharedMem::~SharedMem()
{
freeStoredCopy();
closeMapping();
}
bool SharedMem::initMapping(const char* pname, const size_t psize, const bool clearMemory)
{
DWORD high = psize >> 32;
DWORD low = psize & 0x00000000FFFFFFFF;
mapping_ = CreateFileMappingA(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,high,low,pname);
if (mapping_ == NULL)
return false;
buffer = (unsigned char *) MapViewOfFile(mapping_,FILE_MAP_ALL_ACCESS,0,0,psize);
if (buffer == nullptr)
{
CloseHandle(mapping_);
mapping_ = NULL;
return false;
}
// fix size
size = psize;
// clear memory
if (clearMemory)
memset(buffer,0,size);
return true;
}
void SharedMem::closeMapping()
{
if (mapping_ != NULL)
{
if (buffer != nullptr)
{
UnmapViewOfFile(buffer);
buffer = nullptr;
};
CloseHandle(mapping_);
mapping_ = NULL;
size = 0;
}
}