3

如何从 Windows 用户区与驱动程序通信?(Vista 是否会产生影响。)我能否以及如何从驱动程序站点与服务进行通信?

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

4

5 回答 5

3

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

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

基本路径是:

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

在您所做的服务中:

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

DeviceIOControl( hDev, .. , OVERLAPPED);

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

...

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

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

于 2009-07-16T14:06:20.103 回答
1

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

再次感谢。感谢本教程,我可能会很快添加另一个答案。这是命名,例如。经过

IoCreateSymbolicLink(&usDosDeviceName, &usDriverName);

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

然后,用户态程序可以通过打开文件句柄与驱动程序进行通信:

CreateFile("\\\\.\\示例", 
于 2009-07-16T14:23:46.750 回答
1

除了上面所说的之外,您的问题是:“我能否以及如何与驱动程序站点的服务进行通信?”

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

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

确实,Microsoft WDK 附带的示例可能会回答您的许多问题。

于 2009-07-16T15:42:02.757 回答
0

在书上:“使用 Windows 驱动程序基础开发驱动程序”已被推荐为学习编程驱动程序的答案

于 2009-07-17T06:21:09.880 回答
0

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

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

于 2012-12-12T17:18:37.533 回答