编辑:通过论坛上的另一个问题,我了解到 DeviceIoControl 可以是异步的,所以问题 4 现在只是问题 2
我发现,关于客户端用户模式应用程序如何直接与特定设备通信的大量 Windows 驱动程序文档几乎没有说明。我了解通常此类操作由 Win32 api 管理,但在特定设备或(我感兴趣的)软件驱动程序的情况下,我不知道有很多方法可以完成
文档说可以使用CreateFile、ReadFile、WriteFile 等将驱动程序作为“文件”“打开”,然后从/向它读/写,如果你愿意,可能是异步的。这听起来不错,但感觉这不是所有事情的最佳选择,也不是唯一的选择。DeviceIoControl可以具有特定的控制代码,并且您可以命令这样的驱动程序,但我在那里的文档中看不到任何异步功能。
在驱动程序文档中,很明显驱动程序必须为发送给它的调度调用编写其回调例程,但我不明白这些调度调用来自哪里,或者用户模式客户端如何直接与之交互。
使用 Valorant 的 Vanguard 作为示例软件驱动程序,我高度怀疑它只是从运行中的“文件”中读取/写入 - 它似乎太抽象而无法快速,或者对于复杂系统来说不够具体,正如你所能做的那样fileapi.h被读取和写入,没有任何真正的参数化 - 对吧?
我的问题是:
软件驱动程序是否必须为文档推荐的所有调度调用编写例程,即使它们与硬件无关?
除了R/W 文件 api和DeviceIoControl函数之外,还有其他技术可以与特定(软件)驱动程序进行通信吗?
当我们的软件驱动程序完全为目标用户应用程序定制时,是否有高效、“精益和平均”的解决方案,就像 Vanguard 一样?
(忽略)异步 R / W文件操作是否是以多线程异步方式完成此操作的唯一方法,其中客户端提交许多可能重叠的调用,或者DeviceIoControl是否可以利用线程和异步?