某些exes中的OpenFileMapping访问被拒绝

时间:2011-04-10 21:49:03

标签: c++ c windows visual-c++

我有一个使用

编写变量的程序
CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE , 0, sizeof(data), "Local\\testtest");

然后我将dll加载到firefox的plugin-container.exe(以本地登录用户身份运行)中调用

OpenFileMapping(FILE_MAP_READ,  FALSE, "Local\\testtest");

这很好用。但是,当我尝试将我的dll加载到iexplore.exe(也作为本地登录用户运行)时,我得到一个NULL值,GetLastError返回(0x5)ACCESS DENIED。

我尝试在dll中调整进程的权限以添加SE_CREATE_GLOBAL_NAME但是这没有任何区别(我没想到它,因为只需要获得一个全局名称,我相信而不是本地名称我正在使用)。

无论我尝试什么,使用iexplore.exe它都会因ACCESS DENIED而失败。我找到的唯一方法是以管理员身份运行我的setter程序并以管理员身份运行iexplore.exe,然后就可以读取它了。但我不认为这是一个解决方案,因为我真的想避免在管理员下运行整个exe。

有没有人知道解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

如果安全性不是问题但只是想让它工作,你也可以将文件映射的DACL设置为NULL,这样就可以完全访问所有人。

以下是一个例子。

SetSecurityInfo(handle, SE_KERNEL_OBJECT, 
    DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION,
    NULL, NULL, NULL, NULL);

但请理解,如果您担心安全问题,则不建议这样做。