如何从 Windows 用户区与驱动程序通信?(Vista 是否会产生影响。)我能否以及如何从驱动程序站点与服务进行通信?
我其实不是很懒,应该让我的老板给我买一本书,但我不知道是哪本书。如果没有正确的术语来搜索,从 MSDN 中猜测命令和部分有点费时费力。有人可以给我一些要在文档中查找的术语吗?
OSR online是编写 Windows 驱动程序的一个很好的信息来源。
如何在内核模式下命名设备(带有访问安全性的链接)。
基本路径是:
使用命名函数之一命名您的设备对象(例如 WdfDeviceInitAssignName)。
在您所做的服务中:
hDev = CreateFile( <obj name>, ..., OVERLAPPED )
DeviceIOControl( hDev, .. , OVERLAPPED);
while( !end )
SleepEx( 100, true /*bAltertable*/ );
...
在驱动程序中,您有一个 IRP 队列,您可以在其中对来自服务的请求进行排队。当您想要调用该服务时,您需要完成其中一个 IRP。
注意:它有点复杂......并且取决于您正在使用的驱动程序框架/模型。我只需要在 NDIS 过滤器驱动程序中执行一次。再次询问,如果您需要更多信息。
我必须这样做作为保留链接的答案,而不是作为对克里斯托弗的评论。
再次感谢。感谢本教程,我可能会很快添加另一个答案。这是命名,例如。经过
IoCreateSymbolicLink(&usDosDeviceName, &usDriverName);
我需要的。(我推荐上面的教程使复杂的主题更容易理解)
然后,用户态程序可以通过打开文件句柄与驱动程序进行通信:
CreateFile("\\\\.\\示例",
除了上面所说的之外,您的问题是:“我能否以及如何与驱动程序站点的服务进行通信?”
这通常是通过他们所说的“反向调用”来完成的。您将向下发送 IOCTL 并阻塞,直到驱动程序用请求的数据填充它。
另外,关于订购什么书,我实际上很喜欢 Greg Hoglund Rootkits 书,用于编写基本驱动程序(即 Hello World 驱动程序)。OSR Online 非常好。一个旧的但仍然很棒的是 Windows NT 设备驱动程序开发。OSR 有经典的经典重印本。
确实,Microsoft WDK 附带的示例可能会回答您的许多问题。
在书上:“使用 Windows 驱动程序基础开发驱动程序”已被推荐为学习编程驱动程序的答案
准备好构建和执行的WDK 示例 SIOCTL是您的最佳选择。只需几百行代码(主要是注释和空格)就可以让您快速入门和了解 Windows I/O 模型,这是用户 <==> 内核通信方式的官方方式。
每个 Windows 驱动程序学习者都应该从这个开始。