| 
					阅读:2118回复: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 
					换内存吧				 | |
| 
 | 
 
							
 
				