【问题标题】:Device xxx_init not getting called设备 xxx_init 没有被调用
【发布时间】:2015-07-23 05:53:42
【问题描述】:

我编写了一个简单的流驱动程序来学习设备驱动程序,因为我只有 DLLEntry、Init 和 DeInit 函数,而且我已经将所有函数导出到 .def 文件中。

我还在 HKLM/Drivers/Sample 中添加了驱动程序的注册表设置。

我写了一个应用程序来测试它的工作,我用下面的路径调用了 ActivateDeviceEx。

我的 DLLEntry 函数被调用,但 Init 函数没有被调用。我正在使用 RETAILMSG 宏来打印调试信息。

我也看过1的帖子,他也面临同样的问题

但我不明白我们必须做什么才能让它工作......

【问题讨论】:

  • 您是否查看了您提到的帖子中给出的答案?
  • 那里没有比答案更好的了..

标签: c dll windows-ce


【解决方案1】:

调用 DllEntry 但 Init 并没有暗示函数导出存在问题。流驱动must export at least the following

  • 初始化
  • 取消初始化
  • 打开
  • 关闭
  • 阅读
  • 寻找
  • IOControl

此外,除非注册表中的 Flags 值包含 DEVFLAGS_NAKEDENTRIES,否则每个函数都必须以设备名称为前缀,因此如果驱动程序支持,例如 XYZ 设备,则函数必须命名为 XYZ_Init、XYZ_Deinit 等。

【讨论】:

  • 我只实现了 Init 和 DeInit,并试图从 Windows 调用 createFile API,这还不够。是否有要求我们必须在驱动程序中实现以上所有功能...
  • 根据链接的文章,是的,需要实现所有这些功能。例如,CreateFile 要求驱动程序支持 XXX_Open。实际上,添加一系列简单地返回“成功”值的单行函数并不多,这将是迈向全功能驱动程序的良好第一步。 XXX_Open 函数通过返回一个非零值来指示成功。有关其他功能的详细信息,请查看链接的 MSDN 文章。
猜你喜欢
  • 1970-01-01
  • 2016-09-18
  • 2020-03-21
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
相关资源
最近更新 更多