繁体   English   中英

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

[英]Connecting Windows Driver to Userland Service

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

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

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

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

基本路径是:

使用其中一个命名函数命名您的设备对象(例如WdfDeviceInitAssignName)。

在您的服务中:

hDev = CreateFile( <obj name>, ..., OVERLAPPED )

DeviceIOControl( hDev, .. , OVERLAPPED);

while( !end )
   SleepEx( 100, true /*bAltertable*/ );

...

在驱动程序中,您有一个IRP队列,您可以在其中对来自服务的请求进行排队。 如果要调用该服务,请完成其中一个IRP。

注意:它有点复杂......并且取决于您正在使用的驱动程序框架/模型。 我只需要在NDIS过滤器驱动程序中执行此操作一次。 再问一次,如果您需要更多信息。

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

再次感谢。 由于本教程,我可能会在短期内添加另一个答案。 这是命名,例如。 通过

IoCreateSymbolicLink(&usDosDeviceName, &usDriverName);

我需要的。 (我推荐上面的教程,以便轻松理解复杂的主题)

然后Userland程序可以通过打开文件句柄与驱动程序通信:

CreateFile("\\\\.\\Example",

除了上面所说的,你的问题是:“我可以,以及如何与驱动网站上的服务进行通信?”

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

另外,关于订购哪些书籍,我实际上喜欢Greg Hoglund Rootkits的基本驱动程序编写书(即Hello World驱动程序)。 OSR Online非常棒。 一个旧的但仍然很棒的是Windows NT设备驱动程序开发。 OSR拥有经典的重读书籍。

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

在书中:“使用Windows驱动程序基础开发驱动程序”一直是建议学习编程驱动程序的答案

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM