无法从Windows xp x64 prof中的用户帐户访问已安装的筛选器驱动程序的重新分析点目录

时间:2012-10-02 14:54:15

标签: c++ windows security ntfs filter-driver

我为一个非常特殊的安全应用程序创建了一个“特殊文件系统”。

我使用空目录创建重新分析点。在这个重新分析点后面是一个过滤器驱动程序,它处理NTFS和用户模式程序之间的通信,该程序正在进行一些加密/解密和控制工作(FUSE,TrueCrypt,RamDisc之间的混合......)。整个东西都是C / C ++中的原生,并且在Win7 x64上工作得很好。

现在我有一个很好的任务,让它适用于windwos xp x64 professional。当整个应用程序以管理员权限运行时,它工作正常,但是当我切换到用户帐户时,我无法访问已安装的目录。

安装程序和“特殊文件系统”(让它命名为sfs)是系统服务,其他应用程序必须在用户帐户下运行(COM相关),安装操作成功(当我在安装后切换到管理员帐户)操作我可以访问目录),应用程序的其他部分也可以正常工作,但我唯一无法管理的是访问这个目录。

我给了“大家”和用户组以及特定用户对驱动程序,库(驱动程序和sfs之间的链接),安装程序和特殊文件系统的所有权限,并在注册表中做了很多。我还将此权限授予已安装的目录(所有权限,所有者,......),但没有任何作用。

调试输出显示,对目录或文件内部的请求永远不会出现在“sfs”中。看起来,IO-Manager永远不会向这个地址发送内容。另一个问题是,我无法从操作系统中获取所有调试打印(在本地调试模式下启动并使用SysInternals中的DebugView.exe),但这是另一个故事。

我错过了什么? XP和Win7的安全系统有什么区别?我不知道XP中有任何基本限制吗?

请询问您是否需要代码片段。

欢迎任何建议或想法!

1 个答案:

答案 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做了这个工作?!?