我成功编译和安装了 Microsoft RAM 磁盘示例驱动程序(带有 WDK 8.1 的 VS2013 - 也使用了 WDK 8.1 驱动程序示例)。
自述文件告诉安装后,您可以在管理员提示符下使用 RAM 驱动器。可能与此处询问的问题相同:https ://superuser.com/questions/344577/how-to-access-ramdisk-drive-from-non-admin-user-account-on-windows-xp
根据此线程中给出的答案,我将此代码添加到 RamDiskEvtDeviceAdd 函数中:
status = WdfDeviceInitAssignSDDLString(DeviceInit,
&SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RWX_RES_RWX);
if (!NT_SUCCESS(status)) {
return status;
}
这应该为管理员、世界和保留帐户添加 RWX 权限。
现在普通用户可以访问驱动器并将文件复制到 ram 驱动器。它在资源管理器 (Windows 7) 中也是可见和可访问的。但我仍然无法删除文件(即使是管理员)。第一个提示告诉您删除文件需要管理员权限。如果您确认此提示,则会出现第二个提示:“您需要所有人的权限才能更改此文件。”。
查看磁盘驱动器的属性时,没有可让您检查或授予任何权限的安全选项卡。所以我认为缺少某种安全描述符。
我已经尝试查看其他 RAM 驱动器实现,但它们可能是用不同的驱动器模型(非 WDF)编写的,在这方面似乎工作方式完全不同。
我还尝试获取有关 WDF 的 MSDN 页面的更多信息,但找不到有用的信息。
有人可能会问:为什么不使用有效的 RAM 驱动器解决方案?但实际的问题是创建一个磁盘驱动程序,可以将其配置为按需创建 IO 错误。类似于 Linux 的此解决方案:http ://www.scylladb.com/2016/02/16/fault-injection-filesystem-software-testing/
所以我认为使用一个简单的 RAM 磁盘驱动程序可能是一个好的开始。欢迎任何关于如何解决删除访问权限问题的评论。