我正在.net 平台上工作并使用 C++ 编写我的应用程序。当我使用以下代码创建全局共享内存以在 Windows XP 中存储一些值时,它可以正常工作,但是在 Windows 7 中使用它时,它会给出错误,所以我也应用了安全属性,但它仍然给出了特定的权限错误。
//Global declaration
TCHAR szName[]=TEXT("Global\\MyObject");
bool CreateDACL(SECURITY_ATTRIBUTES *sa)
{
wchar_t *sdd = L"D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GRGW;;;IU)";
return ConvertStringSecurityDescriptorToSecurityDescriptor((LPCSTR)sdd, SDDL_REVISION_1, &sa->lpSecurityDescriptor, NULL) == TRUE;
}
void CreateShareMemory()
{
HANDLE hMapFile =NULL; // Create handle
// Check if already created
hMapFile = OpenFileMapping(
FILE_MAP_ALL_ACCESS, // read/write access
FALSE, // do not inherit the name
szName); // name of mapping object
// If not created, then create
if(hMapFile == NULL)
{
SECURITY_ATTRIBUTES sa;
CreateDACL(&sa);
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
&sa, // default security
PAGE_READWRITE|SEC_COMMIT, // read/write access
0, // max. object size
256, // buffer size
szName); // name of mapping object
int i=GetLastError(); // Here it is giving error no 5
}
}