nim_duilib/base/win32/shared_memory.cpp
jiajia_deng 4933d1f2bc Remove dependency on shared
Signed-off-by: jiajia_deng <2894220@gmail.com>
2019-09-20 16:27:58 +08:00

71 lines
1.3 KiB
C++

// Copyright (c) 2011, NetEase Inc. All rights reserved.
// All rights reserved.
//
// Author: wrt(guangguang)
// Date: 2011/7/4
//
// A wrapper class of Windows shared memory
#include "base/win32/shared_memory.h"
#if defined(OS_WIN)
#include "base/win32/security_util.h"
namespace nbase
{
namespace win32
{
bool SharedMemory::Create(const wchar_t *name, int size)
{
assert(mapping_ == NULL);
mapping_ = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
0, size, name);
if(mapping_)
{
win32::SetObjectToLowIntegrity(mapping_);
}
return mapping_ != NULL;
}
bool SharedMemory::Open(const wchar_t *name)
{
assert(mapping_ == NULL);
mapping_ = OpenFileMapping(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, name);
return mapping_ != NULL;
}
void SharedMemory::Close()
{
if (mapping_ != NULL)
{
CloseHandle(mapping_);
mapping_ = NULL;
}
}
bool SharedMemory::MappedView::OpenView(SharedMemory *shared_memory, bool read_write)
{
assert(!view_);
DWORD access = FILE_MAP_READ;
if (read_write) access |= FILE_MAP_WRITE;
view_ = reinterpret_cast<unsigned char*>(::MapViewOfFile(shared_memory->mapping_, access, 0, 0, 0));
return view_ != NULL;
}
void SharedMemory::MappedView::CloseView()
{
if (view_)
{
::UnmapViewOfFile(view_);
view_ = NULL;
}
}
} // namespace win32
} // namespace nbase
#endif // OS_WIN