如何在 Windows XP 上从非管理员用户帐户访问 RamDisk Drive

如何在 Windows XP 上从非管理员用户帐户访问 RamDisk Drive

我能够使用我的管理员帐户,使用 WinDDK 中的 RAMDISK 示例成功创建/访问 20MB 的 Ram 磁盘驱动器。

但是,当我以非管理员用户身份登录同一台机器时,双击同一 Ram 驱动器进行访问时出现拒绝访问错误。请问这里有人能告诉我如何授予所有用户访问此驱动器的权限吗?

答案1

我无法想象微软为什么会在没有设置其权限的情况下发布 ramdisk 示例,但他们确实这么做了……所以它默认为仅限管理员的权限。

您需要在调用 WdfDeviceInitAssignName() 之后、调用 WdfDeviceCreate() 之前,从 RamDiskEvtDeviceAdd() 中调用 WdfDeviceInitAssignSDDLString()。请注意,只有链接到 wdmsec.lib 时,该函数才可用,您需要将其添加到“源”文件中。您可能希望使用 wdmsec.h 中的 ACL 定义字符串之一,但如果您想了解其结构,也可以编写自己的字符串。

Microsoft ramdisk 示例驱动程序的另一个问题是它无法在 32MB 以上工作(实际上,它只能在 31.99 MB 以下工作),因为代码无法处理 16 位 bootSector->bsSectors 的溢出;超过 0x0000FFFF 总扇区数时,它应该将 bootSector->bsSectors 设置为零,而改用 32 位 bootSector->bsHugeSectors。

请注意,修复 bootSector->bsHugeSectors 问题后,如果不小心,您将面临非分页内核内存耗尽的情况……尽管在大多数情况下,最多 96MB 都是安全的,因为在大多数(现代)情况下,您的 WinXP 系统有 128MB 的非分页内核内存可用。但不要忘记,您的 ramdisk 驱动程序并不是唯一使用非分页池的东西。

答案2

我在 Microsoft 支持网站上找到了以下示例,它创建了可通过非管理员帐户访问的 Ramdisk 驱动器。它适用于 2000、xp、win7。还没有在 Vista 上尝试过。 http://support.microsoft.com/kb/257405

相关内容