无法从Windows XP X64 Prof中的用户帐户访问已安装过滤器驱动程序的Reparsed Point目录

StackOverflow https://stackoverflow.com//questions/12692755

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

我使用空目录创建一个重新分点。在此重新分析点后面是一个过滤器驱动程序,它涉及NTFS和USerMode程序之间的通信,它正在进行一些加密/解密和控制工作(保险丝,TrueCrypt,ramdisc,...)之间的混合。整个东西是C / C ++的原产,工作精细亮相Win7 x64。

现在我有一个很好的任务,可以让它为Windwos XP X64专业工作。当整个应用程序使用管理权限运行时,它可以正常工作,但当我切换到用户帐户时,我无法访问挂载的目录。

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

我给了“每个人”和用户组和特定的用户对驱动程序的所有权限,库(驱动程序和SFS之间的链接),Mounter和特殊文件系统也在注册表中做了很多。我还向装有的dir(所有rigth,所有者,......)给了这个权限,但没有工作。

调试开关显示,该目录的请求或内部的文件从来没有到“SFS”。似乎,IO-Manager从未向此addrs发送些量。另一个问题是,我无法从操作系统中获取所有调试外部(在本地调试模式下启动并使用Sysinternals使用DebugView.exe),但这是另一个故事。

我错过了什么? XP和Win7的安全系统之间有什么区别? xp是否有任何基本限制,我不知道?

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

欢迎任何建议或想法!

有帮助吗?

解决方案

发现了!

我忘记为设备本身设置安全性! 什么是糟糕的事情,不要先找到这个!: - (

这是安装服务中的部分:

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工作?!?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top