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