以下代码在沙盒插件中失败,根据Process Monitor,错误是ACCESS_DENIED。
::PathCchAppend(logDirectory, _MAX_PATH, L"xxxxxxxx.log");
logFile = ::CreateFileW(logDirectory, FILE_GENERIC_READ | FILE_GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
WCHAR logDirectory[_MAX_PATH+1]
变量包含正确的路径,使用进程监视器确认(没有未转义的路径)。
icacls
证明目录
C:\Users\XXXXXX\AppData>icacls LocalLow
LocalLow NT AUTHORITY\SYSTEM:(OI)(CI)(F)
BUILTIN\Administrators:(OI)(CI)(F)
XXXXXXXXXXXX:(OI)(CI)(F)
Mandatory Label\Low Mandatory Level:(OI)(CI)(NW)
Successfully processed 1 files; Failed processing 0 files
AppData \ LocalLow目录不是从低完整性(沙盒)代码进行日志记录的正确位置吗?什么可能导致失败?
实际上,此代码已加载到Flash插件中。对于低完整性过程,Flash的沙盒层是否会拒绝比正常情况下更多的文件系统访问? It says
我们发现我们的沙盒进程需要使用以下SID访问操作系统资源:BUILTIN \ Users,Everyone,用户的登录SID和NTAUTHORITY \ INTERACTIVE。对于从用户继承的任何其他SID,我们设置deny-only属性以禁止进程仅基于该SID访问资源。
用户登录SID"用户登录SID"应该授予访问这个位置的权利,对吗?
我甚至提前创建了日志文件,使用icacls
验证了它具有低完整性标签,CreateFile
仍然失败。