dav*_*idl 13 c++ windows kernel driver wdk
我正在尝试修改Windows内核级磁盘驱动程序以正确响应更新的控制代码.例如,它只有一个废弃的IOCTL_DISK_GET_DRIVE_GEOMETRY
控制代码的处理程序,但没有更新的IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
控制代码,所以我添加了.
当然,我更新了驱动程序以使用所有新的Windows结构和功能,如IoReadPartitionTableEx()
功能和DRIVE_LAYOUT_INFORMATION_EX
结构(我正在尝试向驱动程序添加GPT支持).问题是,当我使用磁盘驱动程序时,我可以看到(使用DebugView)Windows(我认为它是Windows ......也许是其他东西......)仍在向IOCTL_DISK_GET_DRIVE_GEOMETRY
我的驱动程序发送旧的控制代码.我希望Windows将更新的控制代码发送给我的驱动程序.甚至是Windows发送这些控制代码?Windows和驱动程序之间是否还有其他一些我还没知道的层?
驱动程序是否应该以某种方式识别Windows的"类型",以便Windows确切地知道如何"对话"?Windows如何确切地知道要发送给特定驱动程序的控制代码?我已经用Google搜索了这些(看似非常基本的)问题的答案,并且没有找到一个明确的答案,这让我相信我从根本上误解了一些关于Windows驱动程序的问题.我的问题是否有意义?
OP 有 5 个问题(根据问号数量计数)。以下每个问题的回答顺序都与 OP 中提出的问题相同。
要找出谁在调用您的驱动程序,请IOCTL_DISK_GET_DRIVE_GEOMETRY
在驱动程序中该 IOCTL 的处理程序上放置一个断点。当发生中断时,然后查看调用堆栈。你会看到是谁打来的。
实际上,您将拥有一组分层的调用者。这将回答您有关图层的问题。
Windows 通过多种不同方式了解您的驱动程序功能。如果您有微型端口驱动程序,则每种类型的微型端口都必须实现最少的功能集。
此外,StorPort 微型端口还可以使用 API 来指示可选功能。例如StorPortInitializePerfOpts
,用于通知 StorPort 有关 StorPort 微型端口中的各种性能优化的信息。为了更好地回答这个问题,请提供您所拥有的驱动程序的类型。如果您不熟悉各种驱动程序类型,我建议您从 MS 硬件开发中心阅读本文。事实上,无论如何你可能都想读它。
该问题假设 Windows 根据某些假设的驱动程序属性向不同的驱动程序发送不同的控制代码。然而,Windows 使用的模型与前面的答案中提到的模型类似。有基于驱动程序模型的基本功能,在某些情况下还有用于通信功能的 API。(在其他情况下,由驱动程序指示它不支持特定操作。)
答案还有另一个方面,那就是 Windows 和非 Windows 组件可以自由选择它们想要的任何控制代码。因此,第 3 方磁盘分区程序可以使用较旧的几何 IOCTL,即使存在较新的 IOCTL,因为它希望与早期版本的 Windows 兼容。或者Windows组件(例如存储空间)可以使用更新的IOCTL,因为它不具有向后兼容性。
(这个问题是征求意见,所以这个答案是我的意见)。假设“问题”是指“问题”,那么我会说或多或少。但如果这是您第一次(或第二次)尝试 Windows 驱动程序,我再次建议您阅读相关的 MS 文档(上面链接)。
最后,即使OP没有直接询问,听起来也有一个问题“如何测试我添加的IOCTL_DISK_GET_DRIVE_GEOMETRY_EX功能?”。在我看来,最简单的方法是编写一个 Win32 测试程序。调用并显示这一 IOCTL 只需要 20 行左右的代码。这比编写 DISKPART 或类似脚本更容易、更快。