gpt4 book ai didi

c++ - 无法从 Windows xp x64 prof 中的用户帐户访问已安装过滤器驱动程序的重分析点目录

转载 作者:太空宇宙 更新时间:2023-11-04 14:14:00 25 4
gpt4 key购买 nike

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

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

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

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

我给了“每个人”和用户组以及特定用户对驱动程序、库(驱动程序和 sfs 之间的链接)、挂载程序和特殊文件系统的所有权限,并且在注册表中也做了很多。我还向挂载的目录授予了此权限(所有权限、所有者...),但没有任何效果。

调试输出显示,对目录或其中文件的请求永远不会到达“sfs”。看起来,IO-Manager 从来没有向这个地址发送过一些东西。另一个问题是,我无法设法从操作系统获取所有调试输出(以本地 Debug模式启动并使用来自 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 有效?!?

关于c++ - 无法从 Windows xp x64 prof 中的用户帐户访问已安装过滤器驱动程序的重分析点目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12692755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com