LitteSW
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1853回复:5

数据变码

楼主#
更多 发布于:2001-06-22 12:47
请教陆大侠两个问题。

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);

在单步调试时,完全正确,但连续执行时,发现运行几次后赋值失败,而且会产生变码。这该如何解决?
穿梭于都市高楼之间,总是孜孜不倦地追寻着自由,蓦然回首,去发现已陷入深深的枷锁之中
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-06-22 13:06
多数是目标地址无效
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
LitteSW
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-06-22 16:51
这个静态数组是我声明的,怎么会无效呢?
另外,单步执行和连续执行不就是速度上有区别吗?为什么会产生变码呢?
穿梭于都市高楼之间,总是孜孜不倦地追寻着自由,蓦然回首,去发现已陷入深深的枷锁之中
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-06-22 21:37
声明的数组是USER MODE ADDRESS的还是KERNEL MODE ADDRESS的?
如果是DRIVER声明的,就不可能出错. 如果出错, 请考虑换内存.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
LitteSW
驱动中牛
驱动中牛
  • 注册日期2001-06-10
  • 最后登录2010-08-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-06-23 23:47
我想应该是内核模式的,因为我是在驱动中的一个函数内声明的。

UCHAR szOutBuf[2048];

穿梭于都市高楼之间,总是孜孜不倦地追寻着自由,蓦然回首,去发现已陷入深深的枷锁之中
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-06-26 15:06
换内存吧
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
游客

返回顶部