Rtl系列函数学习记录
来源:互联网 发布:淘宝的淘话费 编辑:程序博客网 时间:2024/05/11 03:16
参考教程:谭文的《Windows驱动编程基础教程》
附:这本书真的不错,支持一下作者,不过可能是WDK版本不同或是作者笔误,学习的结果与教程有些出入,另外文章部分是本人学习过程中的理解,可能会有错误。
1.环境说明,要先装WDK或DDK,引用头文件:ntddk.h,ntdef.h,引用库文件:ntdll.lib。
2.RTL_CONSTANT_STRING
这个是初始化unicode串的宏,只能用在串定义的时候,如下:
UNICODE_STRING str = RTL_CONSTANT_STRING(L“my first string!”);
像下面这样的用法是不可以的:
UNICODE_STRING str;
str= RTL_CONSTANT_STRING(L“my first string!”);
3.RtlInitEmptyUnicodeString
这是对UNICODE_STRING进行初始化的函数,引用方法如下:
UNICODE_STRING dst; // 目标字符串
WCHAR dst_buf[50];
RtlInitEmptyUnicodeString(&dst,dst_buf,50*sizeof(WCHAR));
函数运行前:dst.Buffer=0xCCCCCCC(int 3中断),dst.Length=dst.MaximumLength=一个比较大的数
函数运行后:dst.Buffer=&dst_buf, dst.Length=0,dst.MaximumLength=100(50*2).
4.RtlCopyUnicodeString
字符串拷贝,用法如下:
RtlCopyUnicodeString(&dst,&src);
这个函数有几点要注意:
src需要初始化,否则会引起读'CCCCCCCC'中断;
dst也需要初始化,否则会引起写'CCCCCCCC'中断;
该函数拷贝前未进行长度校验,如果dst.MaximumLength<=src.Length也会引发中断,至少需要大一个unicode字符长即2,否则字符是0xCCCC结束,而正常应该是0x0000;
如果像上面那样用RtlInitEmptyUnicodeString(&dst,dst_buf,50*sizeof(WCHAR))初始化dst,那么dst_buf在定义时长度至少要比src.Length大1(字符串最后一个为空),否则会报一个dst_buf corrupted的错误。
5.RtlAppendUnicodeToString
字符串连接,用法如下:
RtlAppendUnicodeToString(&dst,L"my second string!");
说明:此函数在连接字串前会进行空间长度校验,不足则不进行字符串连接。
6.RtlStringCbPrintfW
注: 此函数需在驱动环境下运行,Alt+F12查看函数的定义,引用方法如下:
status=RtlStringCbPrintfW(dst.Buffer,30,L"test code");
说明:调用此函数要先对dst进行初始化,函数调用的结果是,无论dst.Buffer之前是什么值,都重新赋成第三个参数的值,并且第二个参数至少要比第三个参数的长度(按字节算)大2(即1个unicode字符长),执行成功后status会返回0。
补充学习:UNICODE_STRING并不保证Buffer中的字符串是以空结束的,因此直接调用wcslen(str.Buffer),printf("%ws",str.Buffer)可能会引发错误。
- Rtl系列函数学习记录
- RTL内存函数
- RCNN系列学习记录
- 服务器学习记录系列1
- Matlab学习记录(函数)
- 学习PHP函数记录
- python[函数]学习记录
- 2416开发记录六: s3c2410_gpio_setpin()系列函数
- C++模板函数 学习记录
- swift学习记录(函数)
- Jquery 常用函数学习记录
- 0720学习记录(函数)
- ORACLE常用函数学习记录
- python学习记录---匿名函数
- 7、Python3 函数学习记录
- IBatis.Net的学习记录系列
- labview学习历程系列之一“点滴记录”
- Ionic+angularjs 系列文章学习记录
- C# VS 面向对象基础(一)
- 渗透那些事
- 孩子长头垢可涂/B/B专用甘油
- flex4 RIA 获取本地图片文件并加载给img控件
- 图灵奖得主John Hopcroft:计算机科学的新方向
- Rtl系列函数学习记录
- OpenCV之cvSeq 【一次修正】[......]
- UITableView使用指南1(呕心原创)
- ubunttu下配置内核linux-3.6.7
- 再次写给我们这些浮躁的程序员
- 十步让你成为一名优秀的 Web开发人员
- 【小工具】CRF++格式转所有特征显示
- JM8.6解码端是如何把像素值写进test_dec.yuv文件的?(write_out_picture函数)
- Date日期程序--感受类相关的技术细节 笔记整理