DeltaSoft
驱动牛犊
驱动牛犊
  • 注册日期2002-04-29
  • 最后登录2009-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1876回复:8

RtlCopyMemory 运行结果怎么不对?

楼主#
更多 发布于:2002-05-27 12:57
我用 RtlCopyMemory(&Des[0],&Source[0], count * sizeof(StructType))从Irp传递的参数中拷贝数据到驱动程序中申请的内存, 但只有第一个StructType中数据是正确的,其他的都不对! 但我用 循环的方式一个一个地明确地拷贝(  Desc[i].xxxx = Source[i].xxxx)又对了, 这是什么原因造成的呢?


注: 整个数据的长度只有96Bytes。
     数据格式是使用相同的头文件,并且我还使用了 #pragma pack(push, 8) 进行强制对齐!!!

[编辑 -  5/27/02 by  DeltaSoft]

[编辑 -  5/28/02 by  DeltaSoft]

最新喜欢:

ameiamei
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-05-27 13:25
count * sizeof(StructType)是否等于你的大小(96字节)
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
DeltaSoft
驱动牛犊
驱动牛犊
  • 注册日期2002-04-29
  • 最后登录2009-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-27 23:32
在Win32程序,Driver程序我都测试国,都是count * sizeof(StructType) = 96 Byte
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-05-28 10:29
肯定是你其他地方有问题,
RtlCopyMemory(&Des[0],&Source[0],  count* sizeof(StructType)) ;是正确的,
我刚刚测试了,不过结构类型为RECT,count 为4即,
RtlCopyMemory(&Des[0],&Source[0],  4* sizeof(RECT)) ;
是不是你的Dest和Source内存分配的问题
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-05-28 12:23
在定义struct的时候,
最好是对齐。如
dword a;
dword b;
int c;
int d;
bool e;
不要
dword a;
bool e;
int c;
dword b;
...
在从app到sys时,由于VC优化,会做些事情,就会错位了。
DeltaSoft
驱动牛犊
驱动牛犊
  • 注册日期2002-04-29
  • 最后登录2009-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-28 17:56
如果是对齐原因造成的话,那 循环的方式一个一个地明确地拷贝( Desc[i].xxxx = Source[i].xxxx) 就应该不正确了,但事实上却是对的, 是不是很奇怪?

今晚我再拭一次,并将结果贴上来。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-05-28 18:44
期待结果。
DeltaSoft
驱动牛犊
驱动牛犊
  • 注册日期2002-04-29
  • 最后登录2009-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-28 22:22
问题终于解决。

靠, 犯聊一个超级低级错误,定义数据组指针出错。  Delphi用惯聊,使用C++就是会混淆。  

谢谢各位, 虽然大家没有直接指出错误,但大家给聊我信心,才让我解决聊这个问题, 谢谢
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-29 14:17
没有什么,使用一种东西习惯了自然好事,
可要是使用别的可就成了坏是了,我也有同感,我使用DDK习惯了昨天开始装了DriverStudio进去什么都是新的,又得学习
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部