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

时间:2009-07-16 13:22:27

标签: windows driver

如何与Windows中的用户区域的驱动程序进行通信? (Vista,如果这有所不同。)我可以,以及如何与驱动程序站点的服务进行通信?

我其实不是很懒,应该让老板给我买一本书,但我不知道哪一本。猜测来自MSDN的命令和部分有点紧张和时间没有正确的搜索条件。有人可以在文档中找一些要查找的术语吗?

5 个答案:

答案 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)

在书中:learning to program drivers

的答案中建议使用“使用Windows Driver Foundation开发驱动程序”

答案 4 :(得分:0)

准备构建并执行WDK sample SIOCTL是您最好的选择。只需几百行代码(主要是注释和空格)就可以让您快速了解Windows I / O模型,这是用户的官方方式&lt; ==&gt;内核通信方法。

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