123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #include "CShareMemManager.h"
- //bool IsWin9X()
- //{
- // OSVERSIONINFO SysOSVersionInfo;
- // SysOSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- // GetVersionEx(&SysOSVersionInfo);
- // if (SysOSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
- // return true;
- // else
- // return false;
- //}
- //bool IsWinNT()
- //{
- // OSVERSIONINFO SysOSVersionInfo;
- // SysOSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- // GetVersionEx(&SysOSVersionInfo);
- // if (SysOSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
- // return true;
- // else
- // return false;
- //}
- CShareMem::CShareMem(std::string MemName)
- {
- m_ShareMemHandle = NULL;
- m_ShareMemMapHandle = NULL;
- m_ShareMemAddr = NULL;
- m_ShareMemName = MemName;
- m_ShareMemSize = 0;
- }
- CShareMem::~CShareMem()
- {
- CloseShareMemMap();
- if(m_ShareMemHandle == NULL)
- return;
- if(! CloseHandle(m_ShareMemHandle))
- return;
- m_ShareMemHandle = NULL;
- }
- //CreatShareMem函数创建共享内存
- //参数ShareMemLen为共享内存的大小(字节为单位)
- bool CShareMem::CreateShareMem(DWORD ShareMemLen)
- {
- //SECURITY_ATTRIBUTES SecurityAttributes;
- //SECURITY_DESCRIPTOR SecurityDescriptor;
- HANDLE _ShareMemHandle = NULL;
- //InitializeSecurityDescriptor(&SecurityDescriptor, SECURITY_DESCRIPTOR_REVISION);
- //SetSecurityDescriptorDacl(&SecurityDescriptor, true, NULL, false);
- //SecurityAttributes.nLength = sizeof(SecurityAttributes);
- //SecurityAttributes.lpSecurityDescriptor = &SecurityDescriptor;
- //SecurityAttributes.bInheritHandle = true;
- _ShareMemHandle = CreateFileMapping(INVALID_HANDLE_VALUE,
- NULL,
- PAGE_READWRITE,
- 0,
- ShareMemLen,
- m_ShareMemName.c_str());
- m_ShareMemHandle = _ShareMemHandle;
- m_ShareMemSize = ShareMemLen;
- if ((_ShareMemHandle != NULL) && (GetLastError() == ERROR_ALREADY_EXISTS))
- {
- OutputDebugString("_ShareMemHandle != NULL && GetLastError() == ERROR_ALREADY_EXISTS----------------------");
- return true;
- }
- if (_ShareMemHandle == NULL)
- {
- OutputDebugString("Create sharememory fail! _ShareMemHandle is null!----------------------");
- return false;
- }
- return true;
- }
- DWORD CShareMem::GetShareMemSize()
- {
- return m_ShareMemSize;
- }
- //OpenShareMem函数打开共享内存
- bool CShareMem::OpenShareMemMap()
- {
- if((m_ShareMemMapHandle != NULL)&&(m_ShareMemAddr != NULL))
- return true;
- HANDLE _ShareMemMapHandle = OpenFileMapping(FILE_MAP_ALL_ACCESS,false,m_ShareMemName.c_str());
- if (_ShareMemMapHandle == NULL)
- {
- OutputDebugString("Can not open sharememory, _ShareMemMapHandle is null!----------------------");
- DWORD ErrorCode = GetLastError();
- if (ErrorCode == ERROR_FILE_NOT_FOUND)
- {
- OutputDebugString("ErrorCode == ERROR_FILE_NOT_FOUND----------------------");
- }
- if (ErrorCode == ERROR_ACCESS_DENIED)
- {
- //共享内存拒绝访问错误!
- OutputDebugString("ErrorCode == ERROR_ACCESS_DENIED----------------------");
- }
- return false;
- // Windows 98下,找不到共享内存,返回值是 ERROR_FILE_NOT_FOUND
- /*if (IsWin9X())
- {
- if( ErrorCode == ERROR_INVALID_NAME)
- {
- return false;
- }
- }*/
- }
- m_ShareMemMapHandle = _ShareMemMapHandle;
- LPVOID ShareMemAddr = MapViewOfFile(m_ShareMemMapHandle,
- FILE_MAP_READ|FILE_MAP_WRITE,
- 0,
- 0,
- 0);
- if( ShareMemAddr== NULL)
- {
- //映射共享内存错误
- OutputDebugString("MapViewOfFile ShareMemAddr is null!----------------------");
- return false;
- }
- m_ShareMemAddr = ShareMemAddr;
- return true;
- }
- //CloseShareMem函数关闭共享内存
- bool CShareMem::CloseShareMemMap()
- {
- if(m_ShareMemAddr != NULL)
- {
- if(!UnmapViewOfFile(m_ShareMemAddr))
- return false;
- m_ShareMemAddr = NULL;
- }
- if(m_ShareMemMapHandle != NULL)
- {
- if(! CloseHandle(m_ShareMemMapHandle))
- return false;
- m_ShareMemMapHandle = NULL;
- }
- return true;
- }
- bool CShareMem::ReadShareMem(LPVOID Data,LONG DataSize)
- {
- if ( !OpenShareMemMap())
- return false;
- memcpy((LPVOID)Data,m_ShareMemAddr,DataSize);
- return true;
- }
- bool CShareMem::ReadShareMemEx(LONG Positon,LPVOID Data,LONG DataSize)
- {
- if ( !OpenShareMemMap())
- return false;
- memcpy((LPVOID)Data,(LPCSTR)m_ShareMemAddr+Positon,DataSize);
- return true;
- }
- bool CShareMem::WriteShareMem(LPVOID Data,LONG DataSize)
- {
- if ( !OpenShareMemMap())
- return false;
-
- memcpy(m_ShareMemAddr,(LPVOID)Data,DataSize);
- return true;
- }
- bool CShareMem::WriteShareMemEx(LONG Positon,LPVOID Data,LONG DataSize)
- {
- if ( !OpenShareMemMap())
- return false;
- char temp[512] = { 0 };
- sprintf(temp,"WriteShareMemEx Positon:%d,DataSize:%d----------------------", Positon, DataSize);
- OutputDebugString(temp);
- memcpy((LPVOID)((LPSTR)m_ShareMemAddr+Positon),(LPVOID)Data,DataSize);
- return true;
- }
|