【问题标题】:Reading file in Kernel Mode在内核模式下读取文件
【发布时间】:2011-04-26 08:21:32
【问题描述】:

我正在构建一个驱动程序,我想读取一些文件。 有什么方法可以使用“ZwReadFile()”或类似的函数来读取 文件的内容逐行,以便我可以循环处理它们。

MSDN 中的文档指出:- ZwReadFile 开始从给定的 ByteOffset 或当前文件位置读取到给定的 Buffer 中。它在以下条件之一终止读取操作:

  1. 缓冲区已满,因为已读取 Length 参数指定的字节数。因此,如果没有溢出,就不能再将数据放入缓冲区。
  2. 在读取操作期间到达文件末尾,因此文件中没有更多数据要传输到缓冲区中。

谢谢。

【问题讨论】:

    标签: visual-c++ driver device-driver wdk nt-native-api


    【解决方案1】:

    不,没有。你必须创建一个包装器来实现你想要的。

    但是,鉴于内核模式代码有可能使系统崩溃而不是它运行的进程,您必须确保诸如从用户模式知道的那些很长的行等问题不会引起问题。

    如果数据量低于(并将保持)注册表值可以容纳的阈值,则应改为使用该阈值。特别是REG_MULTI_SZ,它具有您正在寻找的属性(“逐行”数据存储)。

    【讨论】:

      【解决方案2】:

      在这种情况下,除非性能很关键(例如“实时”),否则我会将过滤传递给用户模式服务或应用程序。将文件名发送给应用程序进行处理。用户模式应用程序更容易测试和调试。它也不会蓝屏或挂起你的盒子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-26
        • 2015-04-15
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        相关资源
        最近更新 更多