OpenFileMapping在某些前任中被拒绝访问
OpenFileMapping access denied in some exes
我有一个程序,使用
写一个变量CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE , 0, sizeof(data), "Local\testtest");
然后我有加载到firefox的plugin-container.exe(作为本地登录用户运行)的dll,它调用
OpenFileMapping(FILE_MAP_READ, FALSE, "Local\testtest");
这个很好。然而,当我尝试同样的事情与我的dll加载到iexplorer .exe(也运行为本地登录的用户),我得到一个NULL值和GetLastError返回(0x5) ACCESS DENIED。
我尝试在dll中调整进程的权限以添加SE_CREATE_GLOBAL_NAME,但这没有什么区别(我没有想到因为权限只需要制作一个我相信的全局名称,而不是我使用的本地名称)。
无论我尝试什么,使用iexplorer .exe它都失败并拒绝访问。我发现的唯一一种方法是以管理员身份运行我的setter程序,并以管理员身份运行iexplorer .exe,然后它就能够读取它。但是我不认为这是一个解决方案,因为我真的想避免在administrator下运行整个exe。
有人知道解决这个问题的方法吗?
如果安全性不是问题,但只是想使其工作,您也可以将文件映射的DACL设置为NULL,然后将赋予每个人完全访问权限。
示例如下:
SetSecurityInfo(handle, SE_KERNEL_OBJECT,
DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION,
NULL, NULL, NULL, NULL);
如果你想在其他系统会话(不同操作系统的用户启动你的进程)中交换内存或使用系统同步资源(互斥锁,信号量…),你需要做两个步骤:
生成过程中:
- 创建具有重置acl属性的对象。
- 创建带有前缀("Global")的对象如果您创建对象没有第一步,您将得到错误访问拒绝。如果你没有创建第二个步骤,你会得到错误文件没有找到。
在使用资源的进程中:
- 也打开带有前缀("Global")的对象
跟随代码在Windows 10中工作并演示细节:
// prepare kernel synchronization objects
PSECURITY_DESCRIPTOR pSessionSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
if (!pSessionSD)
{
ERR(TEXT("LocalAlloc error."));
}
if (!InitializeSecurityDescriptor(pSessionSD, SECURITY_DESCRIPTOR_REVISION))
{
ERR(TEXT("InitializeSecurityDescriptor error."));
}
if (!SetSecurityDescriptorDacl(pSessionSD, TRUE, NULL, FALSE))
{
ERR(TEXT("SetSecurityDescriptorDacl error"));
}
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = pSessionSD;
sa.bInheritHandle = FALSE;
// Multithread memory
HANDLE hFileMapping;
hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, sa, PAGE_READWRITE, size.HighPart, size.LowPart, "Global\MyMemoryFile.mem");
......
LocalFree(pSessionSD);
相关文章:
- 访问被拒绝后,c++中的故障保护代码
- 删除目录函数访问被拒绝
- 为什么 Windows 拒绝访问某些进程的名称?
- 我在执行任何程序时被拒绝在 devcpp 中访问
- Windows C++:文件夹移动访问被拒绝错误
- AWS AMI 中的 Windows DPAPI 失败,访问被拒绝
- C++ 17 文件系统copy_file访问被拒绝
- mysql c ++连接器异常:用户"root"@'localhost'的访问被拒绝(使用密码:NO)&&MySQL服务器已消失
- 如何修复 CopyFile() 错误 5 - 访问被拒绝错误
- 任务计划程序:设置运行级别时拒绝访问
- 清除同一属性后,设置属性时拒绝访问
- 创建注册表密钥 - 拒绝访问
- 64位Windows API结构对齐导致命名管道上出现“拒绝访问”错误
- RegLoadKey给出错误代码5(拒绝访问)
- 在正常应用程序中,当信号量第一次由服务创建时,它被拒绝访问
- 当发生错误(拒绝访问)时调用Curl-headerfunction和write函数
- 在EnumProcessModules上拒绝访问- c++
- 无法启动程序:拒绝访问
- 拒绝访问nt权限本地服务
- OpenFileMapping在某些前任中被拒绝访问