我有一个使用
编写变量的程序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。
有没有人知道解决这个问题的方法?
答案 0 :(得分:1)
如果安全性不是问题但只是想让它工作,你也可以将文件映射的DACL设置为NULL,这样就可以完全访问所有人。
以下是一个例子。
SetSecurityInfo(handle, SE_KERNEL_OBJECT,
DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION,
NULL, NULL, NULL, NULL);
但请理解,如果您担心安全问题,则不建议这样做。