阅读:1943回复:5
数据变码
请教陆大侠两个问题。
1.我在驱动程序中构造了一个静态数组szOutBuf(UCHAR类型),有部分数据需要填写USHORT类型的值,因此我调用RtlStoreUshort函数。例如: RtlStoreUshort((PUHSORT)szOutBuf + 2, 0x0001); RtlStoreUshort((PUHSORT)szOutBuf + 3, 0x0001); 第一句执行正确,szOutBuf按照USHORT类型并偏移2个字后赋值; 第二句中szOutBuf却按照UCHAR类型偏移,只偏移了3个字节,这是为什么? 2.为了避开这个问题,我改memset进行赋值: memset((PUHSORT)szOutBuf + 2, 0x0001, 1); memset((PUHSORT)szOutBuf + 3, 0x0001, 1); 在单步调试时,完全正确,但连续执行时,发现运行几次后赋值失败,而且会产生变码。这该如何解决? |
|
|
沙发#
发布于:2001-06-22 13:06
多数是目标地址无效
|
|
|
板凳#
发布于:2001-06-22 16:51
这个静态数组是我声明的,怎么会无效呢?
另外,单步执行和连续执行不就是速度上有区别吗?为什么会产生变码呢? |
|
|
地板#
发布于:2001-06-22 21:37
声明的数组是USER MODE ADDRESS的还是KERNEL MODE ADDRESS的?
如果是DRIVER声明的,就不可能出错. 如果出错, 请考虑换内存. |
|
|
地下室#
发布于:2001-06-23 23:47
我想应该是内核模式的,因为我是在驱动中的一个函数内声明的。
UCHAR szOutBuf[2048]; |
|
|
5楼#
发布于:2001-06-26 15:06
换内存吧
|
|
|