阅读:2627回复:13
如何在驱动程序里接收Irp->AssociatedIrp.SystemBuffer?(语法方面的问题).
本人C语言水平极菜.
我在客户端将一个固定格式的字符串传到驱动程序(采用DeviceIOControl方法), 在驱动程序后台中函数 STATUS WDM1DeviceControl(IN PDEVICE_OBJECT fdo,IN PIRP Irp)中想对这个字符串进行拆分, 我的写法如下: ----------------------------------------------- case IOCTL_KNT_LPT_DRV_SET_ONE_DATA_PORT: char LPT_DATA_INFO[8]; DebugPrint(\"正在往数组里写数据\"); RtlCopyMemory(&LPT_DATA_INFO,Irp->AssociatedIrp.SystemBuffer,8); DebugPrint(\"数组:\"+LPT_DATA_INFO[0] +LPT_DATA_INFO[1] +LPT_DATA_INFO[2] +LPT_DATA_INFO[3] +LPT_DATA_INFO[4] +LPT_DATA_INFO[5] +LPT_DATA_INFO[6] +LPT_DATA_INFO[7]); break; ----------------------------------------------- 但是在DebugPrint中无法正确显示这个数组. 想问一下该怎么写这段代码?(我用CHAR数组方法失败) |
|
沙发#
发布于:2003-06-23 09:10
兄弟debugPrint不是你这样用的
例子: DebugPrint(\"%x\", Temp); 和c语言中的sprintf(),相试,在debugPrint.h中有说明,自己看看吧 |
|
板凳#
发布于:2003-06-23 09:39
你打印的如果是字符串的话直接
DbgPrint(\"%s\",LPT_DATA_INFO);当然你的串要有结束标志。 |
|
|
地板#
发布于:2003-06-23 09:50
那我采用
char LPT_DATA_INFO[8]; RtlCopyMemory(&LPT_DATA_INFO,Irp->AssociatedIrp.SystemBuffer,8); 这样是否能将SystemBuffer正确传给LPT_DATA_INFO? (我试了一下不行,用“%S”打印出来只是一个\"?\"号) ---------------- 我该怎么写才正确呢? :( :( |
|
地下室#
发布于:2003-06-23 13:36
首先,要确信你的 Irp->AssociatedIrp.SystemBuffer 中的值是字符串,其次确认串的结束符\'\\0\'是否有,RtlCopyMemory 不会给你拷贝一个结束符的。
%s %S %ws 分别是:单字符串小写、单串大写、双字节字符串小写。 你打印一个 ? 这有可能是出现不可显示的字符 。检查一下你SystemBuffer 中的内容。 |
|
|
5楼#
发布于:2003-06-23 13:41
非常感谢你的耐心教导!!!获益非浅!
|
|
6楼#
发布于:2003-06-23 17:32
你怎么没有放分 ?
|
|
|
7楼#
发布于:2003-06-23 17:49
因为他的问题就没给分。。。 :D
|
|
|
8楼#
发布于:2003-06-23 17:51
我错了... :( :( :(
|
|
9楼#
发布于:2003-06-23 18:23
小弟不知道这里的规矩(我以为大家不在乎得分.)
特此道歉.以后我的问题都设分,回答上一定给. ---------------- 我好像欠好几个人的分.不过幸好我当时发贴时多了个心眼,我都设为1分. ---------------- :D :D |
|
10楼#
发布于:2003-06-23 18:57
如果还没有给分的话,可以改分的。
|
|
11楼#
发布于:2003-06-24 08:13
非常抱歉,我改分了,但是怎么也给不了,总是提示:此贴不是你的或已给分。(我可是刚刚登录的呀,并且我试了几次!)
:( :( :( |
|
12楼#
发布于:2003-06-24 08:20
我的解决方法是这样了:(程序功能就是:做了25个按纽(模拟并口),当点击按纽时就将这个引角取反)
----------------------- 我的客户端是用DELPHI写的.(注意:有些东西是自定义的,如GENERIC_READ ) ----- procedure TFrmMain.SetOnePort(s:string); var SetupDi: TSetupDI; PathName: array [0..127] of char; // |
|
13楼#
发布于:2003-06-24 08:35
另外还有个问题想请教一下.
--------------------- 控制口(从0位开始计算)的第5位的含义是:Enable Bidirectional Port.我试了一下它的功能就是将数据口置成一个中间电压(在约2V) ,此时计算机把它当作1, 下面就是问题: 我想这个引角可以做电脑和外设的通迅标志,(即,电脑在读数据时将它置成1,读完后就置0;而对外设来说,当它发现为0时就送数据,为1时就等待) 我可以在电脑程序里对这个引角读写,可是并口导线只有17根(好象没有这个引角的导线),那外设怎样才能读到这个引角呢??? :( :( :( |
|