如何与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驱动程序学习者都应该从这个开始。