字符串处理(内核基础)(天书夜读笔记)
2012-06-14 20:29
429 查看
Rtl系列函数介绍:
字符串处理
使用字符串结构:
typedef struct _UNICODE_STRING{
USHORT Length; //字符串的长度(字节数)
USHORT MaximumLength; //字符串缓冲区的长度(字节数)
PWSTR Buffer; //字符串缓冲区
}UNICODE_STRING, *PUNICODE_STRING;
字符串的初始化
UNICODE_STRING str={
sizeof (L"Hello World!") - sizeof(L"Hello World!"[0]) ,
sizeof (L"Hello World!") ,L"Hello World!"
};
Ntdef.h有一个宏,简化为:
#include <ntdef.h>
UNICODE_STRING str=RTL_CONSTANT_STRING(L"Hello World!)";
随时初始化一个字符串:
UNICODE_STRING str;
RtlInitUnincodeString(&str , L"Hello World!");
字符串的拷贝:
UNICODE_STRING str; // 目标字符串
WCHAR dst_buf[256]; //定义缓冲区,并没有分配内存
UNICODE_STRING src = RTL_CONSTANT_STRING(L"Hello World!)";
//把目标字符串初始化为拥有缓冲区长度为256的UNICODE_STRING 空串
RtlInitEmptyUnicodeString(dst , dst_buf , 256*sizeof(WCHAR));
RtlCopyUnicodeString(&dst , &src); //字符串拷贝
字符串的连接:
NTSTATUS status;
UNICODE_STRING str; // 目标字符串
WCHAR dst_buf[256]; //定义缓冲区,并没有分配内存
UNICODE_STRING src = RTL_CONSTANT_STRING(L"Hello World!)";
//把目标字符串初始化为拥有缓冲区长度为256的UNICODE_STRING 空串
RtlInitEmptyUnicodeString(dst , dst_buf , 256*sizeof(WCHAR));
RtlCopyUnicodeString(&dst , &src); //字符串拷贝
Status = RtlAppendUnicodeToString(&dst , L"Hello qqqqqqq_World!");
If(status != STATUS_SUCCESS)
{
//NTSTATUS常见的返回值类型,STATUS_SUCCESS返回成功
//STATUS_BUFFER_TOO_SMALL警告,字符串空间不足
//连接UNICODE_STRING,第二个参数修改就行了。
}
字符串的打印:
#include <ntstrsafe.h>
NTSTATUS status;
UNICODE_STRING dst; // 目标字符串
WCHAR dst_buf[512];
RtlInitEmptyUnicodeString(&dst , dst_buf , 512*sizeof(WCHAR));
Status = RtlStringCbprintfW(
dst . Buffer , 512*sizeof(WCHAR) , L"file path = %wZ file size = %d \r\n",
&file_path , file_size);
Dst . Length = wcslen(dst . Buffer) * sizeof (WCHAR);
字符串处理
使用字符串结构:
typedef struct _UNICODE_STRING{
USHORT Length; //字符串的长度(字节数)
USHORT MaximumLength; //字符串缓冲区的长度(字节数)
PWSTR Buffer; //字符串缓冲区
}UNICODE_STRING, *PUNICODE_STRING;
字符串的初始化
UNICODE_STRING str={
sizeof (L"Hello World!") - sizeof(L"Hello World!"[0]) ,
sizeof (L"Hello World!") ,L"Hello World!"
};
Ntdef.h有一个宏,简化为:
#include <ntdef.h>
UNICODE_STRING str=RTL_CONSTANT_STRING(L"Hello World!)";
随时初始化一个字符串:
UNICODE_STRING str;
RtlInitUnincodeString(&str , L"Hello World!");
字符串的拷贝:
UNICODE_STRING str; // 目标字符串
WCHAR dst_buf[256]; //定义缓冲区,并没有分配内存
UNICODE_STRING src = RTL_CONSTANT_STRING(L"Hello World!)";
//把目标字符串初始化为拥有缓冲区长度为256的UNICODE_STRING 空串
RtlInitEmptyUnicodeString(dst , dst_buf , 256*sizeof(WCHAR));
RtlCopyUnicodeString(&dst , &src); //字符串拷贝
字符串的连接:
NTSTATUS status;
UNICODE_STRING str; // 目标字符串
WCHAR dst_buf[256]; //定义缓冲区,并没有分配内存
UNICODE_STRING src = RTL_CONSTANT_STRING(L"Hello World!)";
//把目标字符串初始化为拥有缓冲区长度为256的UNICODE_STRING 空串
RtlInitEmptyUnicodeString(dst , dst_buf , 256*sizeof(WCHAR));
RtlCopyUnicodeString(&dst , &src); //字符串拷贝
Status = RtlAppendUnicodeToString(&dst , L"Hello qqqqqqq_World!");
If(status != STATUS_SUCCESS)
{
//NTSTATUS常见的返回值类型,STATUS_SUCCESS返回成功
//STATUS_BUFFER_TOO_SMALL警告,字符串空间不足
//连接UNICODE_STRING,第二个参数修改就行了。
}
字符串的打印:
#include <ntstrsafe.h>
NTSTATUS status;
UNICODE_STRING dst; // 目标字符串
WCHAR dst_buf[512];
RtlInitEmptyUnicodeString(&dst , dst_buf , 512*sizeof(WCHAR));
Status = RtlStringCbprintfW(
dst . Buffer , 512*sizeof(WCHAR) , L"file path = %wZ file size = %d \r\n",
&file_path , file_size);
Dst . Length = wcslen(dst . Buffer) * sizeof (WCHAR);
相关文章推荐
- GoLang基础数据类型--->字符串处理大全
- Python3.4字符串基础及每次处理一个字符
- Python基础之字符串处理方法的总结
- IOS基础:Objective-C 字符串处理
- Java基础——字符串处理
- c#基础之字符串处理
- Python3基础 os.path.basename 对一个路径字符串进行处理 返回 文件的名字
- 2016/3/18 ①PHP基础 ② PHP函数 ③其他函数(随机数、关于日期) ④正则表达式 ⑤字符串处理
- 20161216C语言基础17_字符串处理函数之fgets与gets
- 20161216C语言基础18_字符串处理函数
- c#基础--字符串的处理_string类
- hdu 2265 Encoding The Diary (基础的字符串处理,巨简单)
- java基础知识(二)字符串处理
- IOS基础:Objective-C 字符串处理
- Python3基础 os.path.dirname 对一个路径字符串进行处理 返回路径
- 【PHP基础知识】——常用字符串处理函数总结
- 20161216C语言基础18_字符串处理函数
- C# 基础知识 (五).变量类型和字符串处理
- shell(1):shell基础及函数,字符串,if,while,时间处理等应用
- 20161216C语言基础18_字符串处理函数