bladellz
驱动小牛
驱动小牛
  • 注册日期2006-03-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望121点
  • 贡献值0点
  • 好评度120点
  • 原创分0分
  • 专家分0分
阅读:1505回复:4

关于UNICODE_STRING的Buffer

楼主#
更多 发布于:2007-04-15 10:20
  UNICODE_STRING nameString;
DbgPrint("Buffer:  %ws\n",nameString->Buffer)怎么会有乱码?

如果这样
PWSTR buffer=(PWSTR)ExAllocatePool(NonPagedPool,nameString->Length);
RtlCopyMemory(buffer,FileName->Buffer,FileName->Length);

buffer还是有乱码 。。。。
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2007-04-16 08:31
UNICODE_STRING中的BUFFER并非是以UNICODE_NULL结尾的字符串,
所以上面的代码都存在问题.

PWSTR buffer=(PWSTR)ExAllocatePool(NonPagedPool,nameString->Length+1);
RtlZeroMemory(buffer, (nameString->Length+1));
RtlCopyMemory(buffer,FileName->Buffer,FileName->Length);
人总在矛盾中徘徊。。。
hgwolf
驱动中牛
驱动中牛
  • 注册日期2002-05-16
  • 最后登录2011-12-12
  • 粉丝0
  • 关注0
  • 积分1035分
  • 威望520点
  • 贡献值0点
  • 好评度316点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-17 01:02
楼上说的对,典型的nameString->Length没处理,数据未初始化
牛犊小牛中牛大牛老牛,天那,我什么时候能变成牛顿啊
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-04-26 08:26
引用第1楼devia2007-04-16 10:31发表的“”:
UNICODE_STRING中的BUFFER并非是以UNICODE_NULL结尾的字符串,
所以上面的代码都存在问题.

PWSTR buffer=(PWSTR)ExAllocatePool(NonPagedPool,nameString->Length+1);
RtlZeroMemory(buffer, (nameString->Length+1));

.......


PWSTR buffer=(PWSTR)ExAllocatePool(NonPagedPool,nameString->Length+2 * sizeof(WCHAR));
RtlZeroMemory(buffer, (nameString->Length+2 * sizeof(WCHAR)));
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
starl1985
驱动小牛
驱动小牛
  • 注册日期2009-02-04
  • 最后登录2016-01-09
  • 粉丝2
  • 关注2
  • 积分134分
  • 威望1021点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-08-28 10:55
引用第3楼rayyang2000于2007-04-26 08:26发表的  :


PWSTR buffer=(PWSTR)ExAllocatePool(NonPagedPool,nameString->Length+2 * sizeof(WCHAR));
RtlZeroMemory(buffer, (nameString->Length+2 * sizeof(WCHAR)));


PWSTR buffer=(PWSTR)ExAllocatePool(NonPagedPool,nameString->Length+sizeof(WCHAR));
RtlZeroMemory(buffer, (nameString->Length+sizeof(WCHAR)));

应该是这样吧???
WCHAR字符的大小就是两个字节啊...为什么还要乘2呢????
多看DDK,勤搜索
游客

返回顶部