阅读:5795回复:29
DeviceControl()通信实现心得
在这里首先我要感谢好朋友――王晓东,他发给我一份ddk编程资料,让我明白了devicectrol()通信的问题。我现在将我的心得写下来给所有和我一样曾经有过这样迷惑的人。
首先我们都知道,缓冲方式有三种:BUFFERED模式、DIRECT模式、NEITHER模式。 METHOD_BUFFERED方式: 应用程序中的输入输出缓冲在驱动程序中用一个指针访问,即IRP中的AssociatedIrp.SystemBuffer指针,当应用程序的数据传入到驱动时,驱动先从AssociatedIrp.SystemBuffer中取得应用程序的数据,在irp完成之前,驱动将要传给应用程序的数据考入AssociatedIrp.SystemBuffer中并设置IoStatus.Information为要传给应用程序的数据长度即可。 METHOD_IN_DIRECT和METHOD_OUT_DIRECT模式: 他们都以相同方式处理。仅有的不同是它们访问用户模式缓冲区时所需的访问权限;METHOD_IN_DIRECT需要读权限;METHOD_OUT_DIRECT既需要读权限又需要写权限,驱动程序以AssociatedIrp.SystemBuffer访问输入缓冲区,以MDL访问输出缓冲区,MDL缓冲地址可以用MmGetSystemAddressForMdl(Irp->MdlAddress)获得。 NEITHER模式: 使用NEITHER模式时,I/O管理器不翻译用户模式的虚拟地址。你得到输入缓冲区的用户模式虚拟地址(在堆栈单元的Type3InputBuffer参数中),和输出缓冲区的用户模式虚拟地址(在IRP的UserBuffer域)。除非你知道你与用户模式调用者运行在同一个进程上下文中,否则这些地址是无用的。如果你恰好知道你正运行在这样的进程上下文中,你可以直接使用这些指针。一般情况下,驱动程序不会要用这种方式,因为很少有通用设备要求过高的处理速度,以至于开发者不得不直接操作应用程序的缓冲区来获得高性能。 |
|
|
沙发#
发布于:2002-07-31 15:57
你好,能不能够把那份资料给我发一份呢?
谢谢:) mailto: zhangchong@tsinghua.org.cn |
|
|
板凳#
发布于:2002-07-31 16:05
用户被禁言,该主题自动屏蔽! |
|
地板#
发布于:2002-08-01 09:03
你好,能不能够把那份资料给我发一份呢? 你的邮箱可能有问题吧,这份资料有7mb,我的邮箱是公司的,用lotus登录,像在本地操作一样,所以可以收发任意大小的附件,我看你是不是找个好点的邮箱,我再给你发。我的email是:xhwaiyy@cmmail.com或xiehw@zhongjie.com.cn(公司的) |
|
|
地下室#
发布于:2002-08-01 12:16
chrys:你好!
我现在也正在进行devicectrol()通信这一块的编程,而且有许多这方面的困惑,你能否也给我发一份这个质料? 我的e-mail: liyongqi0116@263.net 非常感谢! |
|
5楼#
发布于:2002-08-01 14:09
chrys:你好! 已经给你发过来了。 |
|
|
6楼#
发布于:2002-08-01 14:28
xiaoyan_yang1216 你好:
我已经给你发了3次了,可这个附件太大了,发出的邮件总是被退了回来,我已经把它分成4份了,我又发了一次,如果还是发送不了,我再想别的办法。 |
|
|
7楼#
发布于:2002-08-01 17:18
能给我发一份吗?
zpeng@wtwh.com.cn 谢谢了 |
|
8楼#
发布于:2002-08-02 09:48
大家可以在本论坛的http://www.driverdevelop.com/dlit.php?id=70 下载,不要再麻烦chrys老兄了,因为一般的免费邮箱都只有5m,根本放不下7m的附件,即使分成几部分,也要先收完一部分删掉后才能发另一部分,太麻烦了,下载就是要扣25分可用分,可以在论坛上多多灌水 :cool: 然后把参与分换成可用分。我现在正在努力攒到500分,只为了下载高级会员区的一个xpddk,希望那个链接是真的,呵呵,否则我就欲哭无泪了。 :P
|
|
|
9楼#
发布于:2002-08-02 11:00
发给我一份吧?我的邮箱放得下cjg@irc-mp.com
|
|
10楼#
发布于:2002-08-02 13:39
本来我是打算把这份ddk资料放到我的网站供大家下载的,但是毕竟这份资料来自于驱动开发网,下载该资料又需要25分的可用分,那我不是在挖墙角,和驱动开发网唱对台戏,所以觉得还是不妥,所以我不能那样做,请大家原谅。
|
|
|
11楼#
发布于:2002-08-02 13:43
发给我一份吧?我的邮箱放得下cjg@irc-mp.com 已经给你发过来了,一共5封邮件。 |
|
|
12楼#
发布于:2003-03-06 19:14
给我发一份啊,好吗
bxn77@163.com |
|
13楼#
发布于:2003-03-06 21:43
我上一个驱动也要用到DeviceIoControl,呵呵,我可没有你那么好的朋友来教我,硬是把oney的书来来回回看了好几遍,最后总算搞明白了,各种艰辛难以细表,连我的爱机都跟着受累--都不记得崩了几回了,呵呵
|
|
|
14楼#
发布于:2003-03-07 10:29
大家可以在本论坛的http://www.driverdevelop.com/dlit.php?id=70 下载,不要再麻烦chrys老兄了,因为一般的免费邮箱都只有5m,根本放不下7m的附件,即使分成几部分,也要先收完一部分删掉后才能发另一部分,太麻烦了,下载就是要扣25分可用分,可以在论坛上多多灌水 然后把参与分换成可用分。我现在正在努力攒到500分,只为了下载高级会员区的一个xpddk,希望那个链接是真的,呵呵,否则我就欲哭无泪了。 我选择了到本站下载,当然花了25大分。 不过XPDDK在网上是找得到的,不用花500分,好不容易攒的。你可以到天网搜索一下。http://bingle.pku.edu.cn |
|
15楼#
发布于:2003-08-04 11:10
谢谢,又得经验拉。
|
|
16楼#
发布于:2004-01-11 17:09
关于DeviceIoControl我看武安河的书了,也看了DS所带的例子PCIWDM,经过试验还是不太懂,能给我发一份吗?
|
|
|
17楼#
发布于:2004-04-20 00:26
哥哥,我也和楼上的仁兄一样,正郁闷的要命,
能也给我一份吗? 感谢感谢! dingyf20@sina.com |
|
18楼#
发布于:2004-04-29 17:35
老大,我也想要一份,能发给我吗?谢谢!
zsh_7769@163.com |
|
19楼#
发布于:2004-04-29 17:41
呵呵,我一直用的是NEITHER方式传输数据,没感觉有什么不妥,这样可以减少2次内存拷贝,降低CPU占有率,挺好啊。 |
|
上一页
下一页