阅读:1876回复:8
RtlCopyMemory 运行结果怎么不对?
我用 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] |
|
最新喜欢:amei |
沙发#
发布于:2002-05-27 13:25
count * sizeof(StructType)是否等于你的大小(96字节)
|
|
|
板凳#
发布于:2002-05-27 23:32
在Win32程序,Driver程序我都测试国,都是count * sizeof(StructType) = 96 Byte
|
|
地板#
发布于: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内存分配的问题 |
|
|
地下室#
发布于: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优化,会做些事情,就会错位了。 |
|
5楼#
发布于:2002-05-28 17:56
如果是对齐原因造成的话,那 循环的方式一个一个地明确地拷贝( Desc[i].xxxx = Source[i].xxxx) 就应该不正确了,但事实上却是对的, 是不是很奇怪?
今晚我再拭一次,并将结果贴上来。 |
|
6楼#
发布于:2002-05-28 18:44
期待结果。
|
|
7楼#
发布于:2002-05-28 22:22
问题终于解决。
靠, 犯聊一个超级低级错误,定义数据组指针出错。 Delphi用惯聊,使用C++就是会混淆。 谢谢各位, 虽然大家没有直接指出错误,但大家给聊我信心,才让我解决聊这个问题, 谢谢 |
|
8楼#
发布于:2002-05-29 14:17
没有什么,使用一种东西习惯了自然好事,
可要是使用别的可就成了坏是了,我也有同感,我使用DDK习惯了昨天开始装了DriverStudio进去什么都是新的,又得学习 |
|
|