阅读:1318回复:4
DS 的Bug?
我用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指针,发现传下来的数据已经变了,这是为什么啊? } ---- 大虾!!!救命啊!!!! |
|
沙发#
发布于:2003-05-01 11:08
注:
我的消息IO_LOCAL_REG_WRITE是用 CTL_CODE( FILE_DEVICE_UNKNOWN,code,METHOD_BUFFERED,FILE_ANY_ACCESS)产生的 |
|
板凳#
发布于:2003-05-01 15:41
嘿嘿 将 RegWriteRecord 变为 &RegWriteRecord try |
|
|
地板#
发布于:2003-05-02 02:31
对不起,
我的问题里面巧错了, 正确的定义是: REG_WRITE_RECORD *RegWriteRecord; 如果不这么定义,编译都过不了的。呵呵, 但结果还是不行。 magicx大哥,帮帮我啊 我用数组做参数都可以,就是这种结构传下去就变了。 真的伤脑筋。 |
|
地下室#
发布于:2003-05-05 16:22
对不起, 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] |
|
|