我在服务里创建内存映射对象:
m_hShareMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
SHAREMEM_SIZE_HIGH, SHAREMEM_SIZE_LOW, SHARE_MEMOBJ_NAME);然后在我的测试程序里打开:
HANDLE hShareMem = OpenFileMapping(FILE_MAP_WRITE, FALSE, SHARE_MEMOBJ_NAME);
但是总是返回NULL,GetLastError为5(ERROR_ACCESS_DENIED)。
如果把权限设为只读FILE_MAP_READ就可以打开,不知道为什么?
m_hShareMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
SHAREMEM_SIZE_HIGH, SHAREMEM_SIZE_LOW, SHARE_MEMOBJ_NAME);然后在我的测试程序里打开:
HANDLE hShareMem = OpenFileMapping(FILE_MAP_WRITE, FALSE, SHARE_MEMOBJ_NAME);
但是总是返回NULL,GetLastError为5(ERROR_ACCESS_DENIED)。
如果把权限设为只读FILE_MAP_READ就可以打开,不知道为什么?
因为服务一般是以LOCAL SYSTEM帐号运行的。
SECURITY_ATTRIBUTES sa;
.........................
m_hShareMem = CreateFileMapping(INVALID_HANDLE_VALUE,&sa,PAGE_READWRITE,SHAREMEM_SIZE_HIGH, SHAREMEM_SIZE_LOW, SHARE_MEMOBJ_NAME);
{
if(m_hShareMem != NULL)
{
CloseHandle(m_hShareMem);
m_hShareMem = NULL;
}
TRACE(("Creating share memory")); SECURITY_ATTRIBUTES ScrtyAttr = {0};
ScrtyAttr.bInheritHandle = FALSE;
ScrtyAttr.lpSecurityDescriptor = NULL;
ScrtyAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
m_hShareMem = CreateFileMapping(INVALID_HANDLE_VALUE, &ScrtyAttr, PAGE_READWRITE,
SHAREMEM_SIZE_HIGH, SHAREMEM_SIZE_LOW, SHARE_MEMOBJ_NAME);
if(m_hShareMem == NULL)
{
return FALSE;
}
return TRUE;
}