xiaoyan_yang121
驱动牛犊
驱动牛犊
  • 注册日期2002-06-25
  • 最后登录2005-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2006回复:12

WDM中应用程序与驱动程序的通信问题?

楼主#
更多 发布于:2002-08-15 17:27
我现在对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该怎么实现?,还有其他什么方法能够实现应用与驱动的通信?
  
xiaoyan_yang121
驱动牛犊
驱动牛犊
  • 注册日期2002-06-25
  • 最后登录2005-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-21 12:09
谢谢各位!
    我使用的是Buffered IO,我已经解决了!我以前处理的方法是对的,只不过是我以前不仔细而已!
Axi
Axi
驱动牛犊
驱动牛犊
  • 注册日期2002-02-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-20 15:14
楼上一兄弟说得有道理。
不同的IO访问方式会有不一样的结果。
举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。
zyhflorida
驱动牛犊
驱动牛犊
  • 注册日期2002-08-09
  • 最后登录2003-11-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-17 01:08
You used Direct IO or Buffered IO?
xiaoyan_yang121
驱动牛犊
驱动牛犊
  • 注册日期2002-06-25
  • 最后登录2005-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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,这是为什么?请各位帮帮忙!
谢谢!
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-08-16 11:28
check deviceiocontrol pInBufferSize. maybe not correct.

and also maybe data alignment problem.

驱动程序中的offset_word 得不到正确的offset_word 和 IOvalue_word 值

->你得到了什么? 你原来设定了什么?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-08-16 10:29
我又要晕了。。。 :D
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-16 10:21
具体区别说不上来,可是在内核中提供的端口操作的HAL函数就是这样的:WRITE_PORT_UCHAR,WRITE_PORT_USHORT,WRITE_PORT_ULONG
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-08-16 09:47
WORD和USHORT,DWORD和ULONG的差别?
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-16 09:16
你为什么要用word和dword呢,在驱动程序中我一般用USHORT和ULONG,绝对没有问题!
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2002-08-15 20:42
你是怎样定义变量类型的?
指针类型检查了吗?
www.bjjcz.com
Iamme
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2005-10-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-08-15 18:59
为什么用指针挪来挪去?
为什么不定义一个数据结构?
Go,go ahead
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2002-08-15 18:54
用户被禁言,该主题自动屏蔽!
游客

返回顶部