我有一个程序使用写入变量
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) 访问被拒绝。
我尝试调整 dll 中进程的权限以添加 SE_CREATE_GLOBAL_NAME 但这没有什么区别(我没想到会这样,因为只需要该权限来创建我相信的全局名称,而不是我使用的本地名称) 。
无论我尝试什么,iexplore.exe 都会失败并显示“访问被拒绝”。我发现的唯一一种解决方法是以管理员身份运行我的 setter 程序并以管理员身份运行 iexplore.exe,然后它就可以读取它。但我不认为这是一个解决方案,因为我真的想避免必须在管理员下运行整个 exe。
有谁知道解决这个问题的方法吗?
如果安全性不是问题而只是想让其工作,您还可以将文件映射的 DACL 设置为 NULL,这样就可以为每个人提供完全访问权限。
下面是一个例子。
SetSecurityInfo(handle, SE_KERNEL_OBJECT,
DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION,
NULL, NULL, NULL, NULL);
但请理解,如果您担心安全,则不建议这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)