- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UNICODE_STRING总结.
UNICODE_STRING 总结
UNICODE_STRING:
typedef struct _UNICODE_STRING {? USHORT? Length;???? //UNICODE占用的内存字*2;? USHORT? MaximumLength;? PWSTR? Buffer;} UNICODE_STRING ,*PUNICODE_STRING;参数定Lengthbuffer的字“NULL”MaximumLengthbuffer的的Up to MaximumLength bytes may be written into the??????????????????buffer without trampling memory.BufferPointer to a wide-character string指向ANSI_STRING:
typedef struct _STRING {? USHORT? Length;? USHORT? MaximumLength;? PCHAR? Buffer;} STRING, *PANSI_STRING;
WCAHR temp[] = LHello World!;?? //定
UNICODE_STRING str ;
str.Buffer = temp;
str.Length??= wcslen(temp)*sizeof(WCHAR)?? //这个长度为UNICODE字符串所占用的字 字符个数*2 ;?
??? 当使用UNICODE_STRING 要手UNICODE_STRING?的Length和MaximumLength 成Buffer后,Length和MaximumLength 成Buffer被自UNICODE_STRING作Length和MaximumLength 成
?当ANSI,所以在ANSI_STRING,然后再使用RtlAnsiStringToUnicodeString 将其UNICODE_STRING,作。例:
ANSI_STRING? str_a;
UNICODE_STRING? str_u;
WCHAR buf_u[1024] = L;
str_a.Buffer = InputBuffer ;? //InputBuffer
str_a.Length = str_a.MaximumLength = strlen(InputBuffer);
//开辟UNICODE内存空
str_u.Buffer = buf_u;
str_u.Length = str_u.MaximumLength = strlen(InputBuffer) * sizeof(WCHAR);
RtlAnsiStringToUnicodeString(str_u, str_a , TRUE);
//当RtlAnsiStringToUnicodeString第三个参数TRUE时,要用RtlFreeUnicodeString释放临时的UNICODE_STRING
RtlFreeUnicodeString(str_u);
拼接UNICODE_STRING
? 当拼接UNICODE_STRING UNICODE的LengthUNICODE中存
WCHAR str1[] = L12345;
UNICODE_STRING str2;
str2.Buffer = ExAllocatePool(NonPagedPool, wcslen(str1)*sizeof(WCHAR))
str2.Length = 0;
str2.MaximumLength = wcslen(str1)*sizeof(WCHAR);
?RtlAppendUnicodeToString(str2, str1);
?UNICODE 和 ExAllocatePool
?? 内核在UNICODE拼接或其他ExAllocatePool动态分配UNICODE的Buffer,
UNICODE_STRING str;
str.Buffer = ExAllocatePool(NonPagedPool, 50*sizeof(WCHAR));
str.Length = 0;
str.MaximumLength = 50*sizeof(WCHAR);
但若是定UNICODE的指UNICODE ??
PUNICODE_STRING pStr;
因NonPagedPool),pStr指向
pStr = ExAllocatePool(NonPagedPool, 50*sizeof(WCHAR));
接着初始化成
pStr.Length = 0;
pStr.MaximumLength = ???;
如何初始化Buffer ?
文档评论(0)