wekey
驱动牛犊
驱动牛犊
  • 注册日期2002-12-21
  • 最后登录2003-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1319回复:4

DS 的Bug?

楼主#
更多 发布于:2003-05-01 11:06
我用ds开发驱动程序,想让application通过DeviceControl用buffer_method方式发一个结构型参数下去给driver.但是怎么数据一传下去了就变了?!

我定义了结构:
typedef struct _REG_WRITE_RECORD
{
unsigned long Offset;
unsigned long Data;
LONG  rtncode;
} REG_WRITE_RECORD;

deviceIoControl函数使用是:

REG_WRITE_RECORD    RegWriteRecord;

DeviceIoControl(hDevice, IO_LOCAL_REG_WRITE, RegWriteRecord, sizeof(RegWriteRecord), RegWriteRecord, sizeof(RegWriteRecord), &lCountRet, NULL)!=0)

在driver的dispatch函数中接收IO_LOCAL_REG_WRITE消息:

case IO_LOCAL_REG_WRITE:

{
REG_WRITE_RECORD *RegWriteRecord =
(REG_WRITE_RECORD*)I.IoctlBuffer();


if (I.IoctlOutputBufferSize() >= sizeof(RegWriteRecord))
{
我在这里用SoftICE监测RegWriteRecord指针,发现传下来的数据已经变了,这是为什么啊?
}


----

大虾!!!救命啊!!!!
wekey
驱动牛犊
驱动牛犊
  • 注册日期2002-12-21
  • 最后登录2003-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-01 11:08
注:
我的消息IO_LOCAL_REG_WRITE是用
CTL_CODE(                                FILE_DEVICE_UNKNOWN,code,METHOD_BUFFERED,FILE_ANY_ACCESS)产生的
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-01 15:41

DeviceIoControl(hDevice, IO_LOCAL_REG_WRITE, RegWriteRecord, sizeof(RegWriteRecord), RegWriteRecord, sizeof(RegWriteRecord), &lCountRet, NULL)!=0)
----
大虾!!!救命啊!!!!
 

嘿嘿

将 RegWriteRecord 变为 &RegWriteRecord try

[color=red]大头鬼! :P[/color]
wekey
驱动牛犊
驱动牛犊
  • 注册日期2002-12-21
  • 最后登录2003-05-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-02 02:31
对不起,
我的问题里面巧错了,
正确的定义是:
REG_WRITE_RECORD *RegWriteRecord;
如果不这么定义,编译都过不了的。呵呵,

但结果还是不行。
magicx大哥,帮帮我啊
我用数组做参数都可以,就是这种结构传下去就变了。
真的伤脑筋。
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-05 16:22
对不起,
我的问题里面巧错了,
正确的定义是:
REG_WRITE_RECORD *RegWriteRecord;
如果不这么定义,编译都过不了的。呵呵,

但结果还是不行。
magicx大哥,帮帮我啊
我用数组做参数都可以,就是这种结构传下去就变了。
真的伤脑筋。



DeviceIoControl(hDevice, IO_LOCAL_REG_WRITE, RegWriteRecord, sizeof(RegWriteRecord), RegWriteRecord, sizeof(RegWriteRecord), &lCountRet, NULL)!=0)

反正觉的还是有问题:
如果 REG_WRITE_RECORD  *RegWriteRecord;
sizeof(RegWriteRecord)-----你的意思是sizeof(REG_WRITE_RECORD)?
你的命名习惯好象很不好哦~~~
 :P

[编辑 -  5/5/03 by  magicx]
[color=red]大头鬼! :P[/color]
游客

返回顶部