您的位置:首页 > 其它

字符串处理(内核基础)(天书夜读笔记)

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: