可移动驱动器我具有与壳寄存器驱动器时添加到系统中,或者当媒体被插入驱动器(经由SHChangeNotifyRegister)接收通知的托盘的应用程序。在收到这些通知后,我试图打开驱动器查询它的一些属性。对于我的测试,我正在使用一个简单的USB闪存驱动器。这在我在物理控制台登录时正常工作,但如果通过远程桌面登录,则CreateFile调用将失败,并显示ERROR_ACCESS_DENIED。访问在终端服务会话
我调用CreateFile为:
CreateFile(szDrive, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0 NULL);
其中szDrive的形式"\\\\.\\G:"
的。在此之后,我做了几个DeviceIoControl调用。
奇怪的是,我已经在这个运行过程监控和远程桌面场景有的CreateFile从我的托盘应用的驱动器上没有记录。我知道我的托盘应用程序正在调用它,因为我编写了一个日志文件,并且在Process Monitor日志中看到CreateFile调用日志文件。这就好像它甚至不足以被Process Monitor所吸引。
该机器是Windows 7的所有默认设置(即UAC)。我的帐户是本地管理员。在这两种情况下(本地和远程桌面),我都以标准用户身份运行我的托盘应用程序(即不提升)。但是,如果我提升我的托盘应用程序,则远程桌面方案会成功打开驱动器。
这可能最终会被我们只是不支持的场景,但我还是想知道是怎么回事。有任何想法吗?
编辑1:再次看到这一点后,它似乎发生所有驱动器(不只是可移动的)。观察到的行为是相同的:CreateFile与ERROR_ACCESS_DENIED一起失败,并且在Process Monitor中没有日志。
编辑2:似乎远程登录被拒绝读访问;如果我用0替换GENERIC_READ,那么它将成功打开驱动器(尽管DeviceIoControl调用失败并返回ERROR_ACCESS_DENIED)。我正在玩WinObj,尝试查看是否可以授予对驱动器的远程登录读取权限。