将Windows驱动程序连接到Userland服务

如何与Windows用户空间的驱动程序进行通信? (Vista,如果这有所作为。)我可以,以及如何,从司机网站的服务进行沟通?

我其实不是很懒,应该让我的老板给我买一本书,但我不知道是哪一本。 从MSDN猜测命令和部分是有点费神和时间没有正确的条件search。 有人可以给我一些条款来寻找文件?

在线OSR是编写Windows驱动程序的一个很好的信息来源。

如何在内核模式下命名设备 (带有访问安全性的链接)。

基本路径是:

用命名函数之一命名你的设备对象(例如WdfDeviceInitAssignName)。

在你做的服务中:

hDev = CreateFile( <obj name>, ..., OVERLAPPED ) DeviceIOControl( hDev, .. , OVERLAPPED); while( !end ) SleepEx( 100, true /*bAltertable*/ ); ... 

在驱动程序中,您有一个IRP队列,可以在该队列中对来自服务的请求进行排队。 当你想打电话给你的服务,你完成一个IRP。

NB:它有点复杂…取决于你正在使用的驱动程序框架/模型。 我必须在NDIS过滤器驱动程序中只做一次。 再问一次,如果你需要更多的信息。

我必须这样做,作为保持链接的答案,而不是作为对克里斯托弗的评论。

再次感谢。 感谢这个教程,我可以在短时间内添加另一个答案。 这是命名例如。 通过

  IoCreateSymbolicLink(&usDosDeviceName,&usDriverName); 

我需要的 (我推荐上面的教程,使复杂的主题容易理解)

用户级程序可以通过打开一个文件句柄与驱动程序进行通信:

 的CreateFile( “\\\\。\\实施例”, 

除了上面所说的内容之外,还有一个问题:“我能不能和司机现场的服务进行沟通?

这通常是通过他们所称的“反向呼叫”来完成的。 您将发送一个IOCTL并阻塞,直到驱动程序用请求的数据填充它。

另外,关于要订购什么书,我确实喜欢Greg Hoglund Rootkits的基本驱动程序书(也就是Hello World驱动程序)。 OSR在线是优秀的。 一个旧的,但仍然是伟大的Windows NT设备驱动程序开发。 OSR有伟大的书的经典重印得到。

实际上,微软的WDK的例子可能会回答你的许多问题。

在这本书上:“用Windows驱动程序基础开发驱动程序”已经提供了一个解答程序驱动程序的建议

准备构建并执行的WDK示例SIOCTL是您最好的选择。 只有几百行代码(主要是注释和空格)将使您快速了解Windows I / O模型,这是用户<==>内核通信方法的正式方式。

每个Windows驱动程序学习者都应该从这个开始。