我为一个非常特殊的安全应用程序创建了一个“特殊文件系统”。
我使用空目录创建重新分析点。在这个重新分析点后面是一个过滤器驱动程序,它处理NTFS和用户模式程序之间的通信,该程序正在进行一些加密/解密和控制工作(FUSE,TrueCrypt,RamDisc之间的混合......)。整个东西都是C / C ++中的原生,并且在Win7 x64上工作得很好。
现在我有一个很好的任务,让它适用于windwos xp x64 professional。当整个应用程序以管理员权限运行时,它工作正常,但是当我切换到用户帐户时,我无法访问已安装的目录。
安装程序和“特殊文件系统”(让它命名为sfs)是系统服务,其他应用程序必须在用户帐户下运行(COM相关),安装操作成功(当我在安装后切换到管理员帐户)操作我可以访问目录),应用程序的其他部分也可以正常工作,但我唯一无法管理的是访问这个目录。
我给了“大家”和用户组以及特定用户对驱动程序,库(驱动程序和sfs之间的链接),安装程序和特殊文件系统的所有权限,并在注册表中做了很多。我还将此权限授予已安装的目录(所有权限,所有者,......),但没有任何作用。
调试输出显示,对目录或文件内部的请求永远不会出现在“sfs”中。看起来,IO-Manager永远不会向这个地址发送内容。另一个问题是,我无法从操作系统中获取所有调试打印(在本地调试模式下启动并使用SysInternals中的DebugView.exe),但这是另一个故事。
我错过了什么? XP和Win7的安全系统有什么区别?我不知道XP中有任何基本限制吗?
请询问您是否需要代码片段。
欢迎任何建议或想法!
答案 0 :(得分:0)
发现它!
我忘了为设备设置安全性了! 不早点找到这个有什么坏事! : - (
这是装载服务中的部分:
static VOID GetSecAttr(PSECURITY_ATTRIBUTES SecAttr)
{
LPTSTR sd = L"D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GRGW;;;WD)(A;;GR;;;RC)";
ZeroMemory(SecAttr, sizeof(SECURITY_ATTRIBUTES));
ConvertStringSecurityDescriptorToSecurityDescriptor(sd, SDDL_REVISION_1, &SecAttr->lpSecurityDescriptor, NULL);
SecAttr->nLength = sizeof(SECURITY_ATTRIBUTES);
SecAttr->bInheritHandle = TRUE;
}
static VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
//... some declarations ...
SECURITY_ATTRIBUTES sa;
//... some stuff like syncronisation, named pipe and so on...
GetSecAttr(&sa);
device = CreateFile(
MY_DEVICE_NAME,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
&sa, //!!! and this was NULL!!!
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if (device == INVALID_HANDLE_VALUE) {/*...*/}
}
感谢所有花时间帮助我的人!
......为什么地狱为Win7做了这个工作?!?