首页
社区
课程
招聘
[讨论][讨论]UNICODE_STRING和UNICODE_STRING连接的问题?
发表于: 2009-5-26 12:43 7012

[讨论][讨论]UNICODE_STRING和UNICODE_STRING连接的问题?

2009-5-26 12:43
7012
//CODE1
dst.Buffer=(PWCHAR)ExAllocatePoolWithTag(NonPagedPool,256,MEM_TAG);
dst.Length=dst.MaximumLength=256;
RtlInitUnicodeString(&src,L"myunicode");
RtlInitUnicodeString(&src,L"string");
RtlAppendUnicodeStringToString(&dst,&src);
KdPrint(("%wZ",&dst));
ExFreePool(dst.Buffer);
dst.Buffer=NULL;
dst.Length=dst.MaximumLength=0;
代码蓝屏,而且不能连接
//CODE2
RtlInitEmptyUnicodeString(&dst,buf,256*sizeof(WCHAR));
RtlInitUnicodeString(&dst,L"myunicode");
RtlInitUnicodeString(&src,L"string");
RtlAppendUnicodeStringToString(&dst,&src);
KdPrint(("%wZ",&dst));
无法连接.....
不知道什么原因

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
2
//CODE1
dst.Length=dst.MaximumLength=256;
显然dst.Length应该为0

//CODE2
RtlInitEmptyUnicodeString(&dst,buf,256*sizeof(WCHAR));
RtlInitUnicodeString(&dst,L"myunicode");
这两行是有问题的,因为后一行的RtlInitUnicodeString使得前一行的RtlInitEmptyUnicodeString没有了作用。
注意RtlInitUnicodeString的MSDM解释:

VOID
  RtlInitUnicodeString(
    IN OUT PUNICODE_STRING  DestinationString,
    IN PCWSTR  SourceString
    );

Comments
The Buffer member of DestinationString is initialized to point to SourceString. The length and maximum length for DestinationString are initialized to the length of SourceString. If SourceString is NULL, the length is zero.

也就是说调用RtlInitUnicodeString就相当于dst.Buffer变成了指向L"myunicode"这个宽字符串的常量指针(而不是原来的buf),同时MaximumLength也改为了L"myunicode"的长度(而不是原来的256*sizeof(WCHAR))。因此你后面的RtlAppendUnicodeStringToString调用因为目标UNICODE_STRING的最大长度太小,而没有写进去。

你试试这么写:

RtlInitEmptyUnicodeString(&dst,buf,256*sizeof(WCHAR));
RtlInitUnicodeString(&src,L"myunicode");
RtlCopyUnicodeString(&dst,&src);
RtlInitUnicodeString(&src,L"string");
RtlAppendUnicodeStringToString(&dst,&src);
KdPrint(("%wZ",&dst));
2009-5-26 13:20
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
//CODE2解决了 谢谢小聪 但是CODE1没搞定
2009-5-26 14:36
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
//CODE1搞定
dst.Buffer=(PWCHAR)ExAllocatePoolWithTag(NonPagedPool,256,MEM_TAG);
        dst.Length=dst.MaximumLength=256;
        RtlInitUnicodeString(&src,L"myunicode");
        RtlCopyUnicodeString(&dst,&src);
        //UNICODE_STRING src;
        RtlInitUnicodeString(&src,L"string");
        RtlAppendUnicodeStringToString(&dst,&src);
        KdPrint(("%wZ",&dst));
        ExFreePool(dst.Buffer);
2009-5-26 14:41
0
雪    币: 419
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
真是晕 也不知道你们怎么喜欢这样的编码的

不是一般难看啊
2009-5-26 14:47
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
内核主要字符串编码,安全
2009-5-26 18:14
0
游客
登录 | 注册 方可回帖
返回
//