阅读:2006回复:12
WDM中应用程序与驱动程序的通信问题?
我现在对PCI卡的I/O进行读写,我用以下方法可以很好的对单个I/O读写:
在应用程序中用:BYTE writevalue[]={0x33,0x02}; 在驱动程序中相应的IOCTL处用: IOvalue = *Buffer++; offset = *Buffer; 并调用:WRITE_PORT_UCHAR(Port_byte,IOvalue); 但是我对I/O进行WORD和DWORD读写时,同样采用此类方法, 在应用程序中有:WORD writevalue_word[]={0x6677,0x02};驱动程序中有: Buffer_word = (PUSHORT)pIrp->AssociatedIrp.SystemBuffer; IOvalue_word = *Buffer_word++; offset_word = *Buffer_word; 通过BGUVIEW调试软件看,驱动程序中的offset_word 得不到正确的offset_word 和 IOvalue_word 值。 请问各位除了采用数组的方法对于WORD和DWORD该怎么实现?,还有其他什么方法能够实现应用与驱动的通信? |
|
沙发#
发布于:2002-08-21 12:09
谢谢各位!
我使用的是Buffered IO,我已经解决了!我以前处理的方法是对的,只不过是我以前不仔细而已! |
|
板凳#
发布于:2002-08-20 15:14
楼上一兄弟说得有道理。
不同的IO访问方式会有不一样的结果。 |
|
|
地板#
发布于:2002-08-17 01:08
You used Direct IO or Buffered IO?
|
|
地下室#
发布于:2002-08-16 16:28
谢谢各位的指点!
我现在采用了将一个DWORD分解为4个BYTE,然后放在数组中,再传给DRIVER的方法,例如: DWROR 0X11223344; 分解放在数组中后为:BYTE WRITEVALUE[]={0X11,0X22,0X33,0X44}; 然后再驱动中在把得到的四个BYTE合并为一个DWORD,也可解决此问题,但好象有点笨! 但对前面提到的问题还是未解决: 在驱动中我用的是USHORT和ULONG,在应用程序中我也用了USHOR和ULONG,例如: 应用程序中:ULONG WRITEVALUE[]={0X11223344,0X02}; 在DRIVER中:GETVALUE=*buffer; 可以得到GETVALUE=0X11223344,但GETOFFSET=*(buffer+1),得到的GETOFFSET却不是想要的0X02,这是为什么?请各位帮帮忙! 谢谢! |
|
5楼#
发布于:2002-08-16 11:28
check deviceiocontrol pInBufferSize. maybe not correct.
and also maybe data alignment problem. 驱动程序中的offset_word 得不到正确的offset_word 和 IOvalue_word 值 ->你得到了什么? 你原来设定了什么? |
|
6楼#
发布于:2002-08-16 10:29
我又要晕了。。。 :D
|
|
7楼#
发布于:2002-08-16 10:21
具体区别说不上来,可是在内核中提供的端口操作的HAL函数就是这样的:WRITE_PORT_UCHAR,WRITE_PORT_USHORT,WRITE_PORT_ULONG
|
|
8楼#
发布于:2002-08-16 09:47
WORD和USHORT,DWORD和ULONG的差别?
|
|
9楼#
发布于:2002-08-16 09:16
你为什么要用word和dword呢,在驱动程序中我一般用USHORT和ULONG,绝对没有问题!
|
|
10楼#
发布于:2002-08-15 20:42
你是怎样定义变量类型的?
指针类型检查了吗? |
|
|
11楼#
发布于:2002-08-15 18:59
为什么用指针挪来挪去?
为什么不定义一个数据结构? |
|
|
12楼#
发布于:2002-08-15 18:54
用户被禁言,该主题自动屏蔽! |
|