【问题标题】:Accessing same resource across restarts in Windows在 Windows 中跨重启访问相同的资源
【发布时间】:2009-07-31 07:40:17
【问题描述】:

我会在系统关闭或服务关闭之前在文件/内存中写入一些东西。在下次系统重新启动时,是否可以在文件系统加载之前访问磁盘上的相同文件或相同内存?实际需求是这样的,我们有一个位于卷级驱动程序和文件系统驱动程序之间的驱动程序......在驱动程序代码的那部分,我想访问一些内存或文件。

感谢和问候,
卡尔文

【问题讨论】:

    标签: c windows device-driver


    【解决方案1】:

    这里的逻辑是如果它不是太大,则将它读/写到注册表中。您是否有不想使用注册表的原因?

    如果您需要访问大数据并且正在编写卷或设备过滤器并且不能依赖内核中的 ZwOpen/Read/Write/Close 函数,则一种方法是在用户模式下创建文件,获取其设备名称和集群链并将它们存储在注册表中。下次启动时,您可以从注册表中获取设备和集群,并对它们进行直接 I/O。

    【讨论】:

    • 是的,数据比 12mb 大很多(我认为 reg 只能容纳 12 个),而且没有客户接受使用他们的整个注册表。
    • 然后创建一个12mb的文件,获取集群链并使用它。
    • 感谢您的回答,我会尝试,任何示例伪代码都会有更好的帮助...
    • 在用户模式或内核模式下(无论您喜欢什么),您都可以像这样初始化数据存储: 1. 在引导磁盘 FS 上创建一个文件 2. 将其大小调整为 12MB(填充 12Mb 零或使用API 设置文件大小) 3. 使用 FSCTL_GET_RETRIEVAL_POINTERS 获取分配信息 4. 将此分配信息存储在注册表中 您可以像这样使用数据存储: 1. 从注册表中读取分配信息 2. 创建简单的读/写函数物理磁盘,使用注册表中的集群信息我希望这会有所帮助
    【解决方案2】:

    由于您想在文件系统加载之前访问它,我的第一个想法是在文件系统之外的硬盘驱动器上分配和使用一块存储空间。您可以在驱动器上创建一个隐藏的迷你分区,并使用低级 I/O 命令来读取和写入您的数据。

    这是嵌入式系统领域的一项常见任务,我们通常通过在系统中添加某种非易失性存储设备(闪存、电池供电的 DRAM 等)并对该设备进行读写来实现它.由于您可能无法像嵌入式开发人员那样对可用硬件进行相同级别的控制,因此我能想到的最接近的模拟方法是在物理磁盘上保留一块空间,您可以从中读取而无需安装为一个文件系统。一个专用的迷你分区可能效果最好,因为如果你知道它的大小,你可以把它当作一个大的原始访问缓冲区,并且可以避免文件名、文件系统等的麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      相关资源
      最近更新 更多