01 |
VOID RtlInitUnicodeString (OUT PUNICODE_STRING DestinationString,IN PCWSTR SourceString OPTIONAL) |
04 |
DestinationString->MaximumLength = 0; |
05 |
DestinationString->Length = 0; |
06 |
DestinationString->Buffer = (PWSTR)SourceString; |
07 |
if (ARGUMENT_PRESENT(SourceString)) |
09 |
Length = wcslen(SourceString) * sizeof(WCHAR); |
10 |
ASSERT(Length < MAX_USTRING); |
11 |
if(Length >= MAX_USTRING) |
13 |
Length = MAX_USTRING - sizeof(UNICODE_NULL); |
15 |
DestinationString->Length = (USHORT)Length; |
16 |
DestinationString->MaximumLength = (USHORT)(Length + sizeof(UNICODE_NULL)); |
21 |
NTSTATUS RtlInitUnicodeStringEx ( OUT PUNICODE_STRING DestinationString,IN PCWSTR SourceString OPTIONAL) |
24 |
DestinationString->Length = 0; |
25 |
DestinationString->MaximumLength = 0; |
26 |
DestinationString->Buffer = (PWSTR)SourceString; |
27 |
if (ARGUMENT_PRESENT(SourceString)) |
29 |
Length = wcslen(SourceString); |
30 |
// We are actually limited to 32765 characters since we want to store a meaningful MaximumLength also. |
31 |
if (Length > (UNICODE_STRING_MAX_CHARS - 1)) |
33 |
return STATUS_NAME_TOO_LONG; |
35 |
Length *= sizeof(WCHAR); |
36 |
DestinationString->Length = (USHORT)Length; |
37 |
DestinationString->MaximumLength = (USHORT)(Length + sizeof(WCHAR)); |
39 |
return STATUS_SUCCESS; |
从以上代码可见,这2个函数会将传入的字符串指针直接赋值给结构体,这样的话,如果传入的是栈字符串,那么UNICODE_STIRNG只能在当前域内使用,不能存储到其他生命周期更长的地方,否则栈恢复以后读取到不正确的数据,
然而传入一个全局字符串是可以的,例如:
UNICODE_STRING str1;
void func()
{
WCHAR buf[]=L"lich";
RtlInitUnicodeString(&str1,buf);
}
这是错误写法
https://www.0xaa55.com/forum.php?mod=viewthread&tid=1371&extra=page%3D6
- Building Modern Web Apps-构建现代的 Web 应用程序(一些感想)
<iframe src="http://channel9.msdn.com/Series/MVA-China/Web20140611A01/player?h=540&w=960 ...
- 20155206赵飞技能获取经验,C语言学习感想与对JAVA的学习目标
自己较强的技能获取经验. 1:实话实说我自己是没有哪个技能可以超过90%的人的,只有自认为做的还可以的一些事情,例如打篮球,office软件的应用,一百米跑.至于其他方面就是很平庸了. 2:经验主要有 ...
- C#注解属性的感想一:
C#当中Attribute(中文注解属性)已经知道这个概念已经很久很久了,不过悲剧的是在实际项目当中重来没有用它来做过什么东西,以致对它的理解总是很浅薄,更谈不上如何在实际项目中运用它.最近在学习&l ...
- 完成Matrix丶Kingdom PPT后的感想
这次Presentation是我在这节课的第一次上台演讲,让我感悟良多. 具体对我的PPT有兴趣的朋友可以call我,我会共享给大家. 这次老师布置的任务对我而言很有意义.首先,我作为最后一组,我欣赏 ...
- 记录在xx公司被考核的15天及自己的感想
在大学有两件事让我很遗憾. 第一:在2013年7月我和自己的前任女朋友分手,这是两年前的事了,我们谈了七个月. 第二:在2015年4月我被xx公司淘汰了,正如我的前任女朋友是我遇到的最好女孩,这家公司 ...
- 在帝都的Android面试感想
#第一次面试赤子城Android开发实习生 关于面试的表现和感想 1.没有准备充分就去面试(这是大忌,也就直接决定了结果) 我去面试Android,但是却不知道很多关于Android的基础知识,就是明 ...
- <构建之法>3-5章感想
提示:(下面的总结我会按照每章发现的问题,自己的回答,感想来陈述) 3章. 在阅读3.2.4职业成长-自我评估的时候,说到CRUD需要一些核心技术和许多控扩展的知识,那么作为软件工程的学生,在学校除了 ...
- spring1冲刺感想与总结
感想与体会: 通过团队合作的第一个sprint,我们知道如何在团队合作中做好自己,还有与队友不合时,如何和平处理问题.产品负责人是一个重要的的角色,他负责任务的安排,处理合作中意见不统一的问题.通过这 ...
- NOIP2014感想
NOIP2014转眼就结束了,让人不由感慨时间之快,仿佛几天前还是暑假,几天后就已经坐在考场里了. 从暑假8月开始写博客,发了一些解题报告什么的,但这篇文章不再会是“题目大意 & 解题过程 & ...
随机推荐
- ssh无密登录
ssh登录一般两种方式: 1.密码登录 2.密钥验证无需密码 使用方式:1.生成密钥 2.将公钥追加到authorized_keys中,需要注意的是执行权限需为600,这里因而第一次添加使用的是> ...
- docker4dotnet
docker4dotnet #1 – 前世今生 & 世界你好 作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的 ...
- 64位linux下安装oracle10 64位 遇到 :ins_ctx.mk ;ins_emdb.mk
http://blog.csdn.net/bamuta/article/details/10523835 http://www.cnblogs.com/kerrycode/p/3519446.html ...
- Linux的默认编码可以通过export LC_ALL=zh_CN.GBK来修改
http://www.cnblogs.com/malecrab/p/5300486.html
- 在Livemedia的基础上开发自己的流媒体客户端
一.背景 二.Livemedia框架介绍 1.总体框架 2.客户端框架 2.1 客户端openRTSP流程 2.2增加一种新的媒体 2.2.1增加媒体的format 2.2.2 新媒体需要考虑的问题 ...
- Mysql5.6.24 zip解压缩版配置及修改默认编码方法
win64位下载地址: http://dev.mysql.com/downloads/file.php?id=456319 下载完毕后解压 配置环境变量 在Path后加上mysql解压后bin文件夹所 ...
- Score(规律)
Score Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submiss ...
- leetcode_question_70 Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- WLAN和WIFI的区别
在刚刚为大家介绍的wifi上网是什么意思?文章中为大家介绍了什么wifi无线上网,但大家可能会有这样的疑问,听说最多的应该是WLAN无线上网,很多笔记本电脑使用的都是WLAN无线上网,那么wlan和w ...
- 字符串分割函数Demo
#include <stdio.h> int getLength(char *string); int main(int argc, char **argv){ char str[12] ...