我用System服務形式CreateFileMapping開了一段Gobal記憶體控制元件 可讀可寫,
在管理員權限下可以正常Open并且讀取,但在其他用戶行程(非管理員)下讀取不到,回傳權限不足(5)ERROR_ACCESS_DEINED。
DWORD dwSize = 256;
HANDLE hMap = CreateFileMapping(/*hFile*/INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE|SEC_COMMIT, 0, 1024 * 1024, L"Global\\Test");
int rst = GetLastError();
if (hMap != NULL && rst == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMap);
hMap = NULL;
}
char* pszText = NULL;
pszText = (CHAR*)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 1024 * 1024);
while (1)
{
Sleep(3000);
}
UnmapViewOfFile((LPCVOID)pszText);
CloseHandle(hMap);
return 0;
然后
HANDLE hMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, TRUE, L"Global\\Test");
if (hMap == NULL)
{
lstrcpy(Result, L"0");
}
char* pszText = NULL;
pszText=(CHAR*)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 1024 * 1024);
讀取不到,GetlastError回傳5
uj5u.com熱心網友回復:
啊 有了PSECURITY_DESCRIPTOR pSec = (PSECURITY_DESCRIPTOR)LocalAlloc(LMEM_FIXED, SECURITY_DESCRIPTOR_MIN_LENGTH);
if(!pSec)
{
return GetLastError();
}
if(!InitializeSecurityDescriptor(pSec, SECURITY_DESCRIPTOR_REVISION))
{
LocalFree(pSec);
return GetLastError();
}
if(!SetSecurityDescriptorDacl(pSec, TRUE, NULL, TRUE))
{
LocalFree(pSec);
return GetLastError();
}
SECURITY_ATTRIBUTES attr;
attr.bInheritHandle = FALSE;
attr.lpSecurityDescriptor = pSec;
attr.nLength = sizeof(SECURITY_ATTRIBUTES);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269211.html
標籤:其它技術問題
上一篇:求助
