- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内核模式下的字串操作
1.内核模式下的字串操作
A、ASCII字符串和UNICODE字符串
B、ANSI_STRING字符串和UNICODE_STRING字符串
C、字符串的初始化与销毁
D、字符串复制,比较,(大小写,整数和字串)相互转换
E、ANSI_STRING字符串和UNICODE_STRING字符串相互转换
A、ASNI字符串和UNICODE字符串
在C语言中,有ANSI和UNICODE 两个不同字串类型。
char* s1=abc; //CHAR * s1=abc; 61
KdPrint((%x,%s\n,s1,s1));
wchar_t * s2=Labc; //WCHAR * s2=Labc;00 61
KdPrint((%x,%S\n,s2,s2));
B、ANSI_STRING字符串和UNICODE_STRING字符串
在C语言中,传统的char和wchar_t类型的字符串在使用过程中,很容易出现缓冲区溢出错误,从而导致整个系统的崩溃。一般由于程序员没有对字串长度进行校验造成的。
所以在DDK中 提供了2个带字串长度的类型 ANSI_STRING和UNICODE_STRING
ANSI_STRING s1 ; //CHAR Length MaxLength PCHAR
KdPrint((%x,%Z\n,s1,s1));
UNICODE_STRING s2 //WCHAR * =PWSTR
KdPrint((%x,%wZ\n,s2,s2));
C、字符串的初始化与销毁
在使用ANSI_STRING和UNICODE_STRING这2个类型的字串时都需要对其进行初始化 和销毁
RtlInitAnsiString RtlInitString(s1,abc); //%Z
RtlInitUnicodeString(s2,Labc);// %wZ
AnsiString1.Buffer=AnsiString1字符串;
AnsiString1.Length=strlen( AnsiString1.Buffer);
AnsiString1.MaximumLength=BUFFER_SIZE;
UnicodeString1.Buffer = L3333333333333333333322222222221111112;
UnicodeString1.Length=wcslen(UnicodeString1.Buffer)*2;
UnicodeString1.MaximumLength = BUFFER_SIZE;
D、字符串复制,比较,(大小写,整数和字串)相互转换
RtlFreeAnsiString
RtlFreeUnicodeString
RtlCopyUnicodeString //复制字符串
RtlEqualUnicodeString //比较字符串是否相等
RtlUpcaseUnicodeString //小写转大写
RtlUnicodeStringToInteger //字符串转化成整数
RtlIntegerToUnicodeString //整数转化成字符串
E、ANSI_STRING字符串和UNICODE_STRING字符串相互转换
RtlUnicodeStringToAnsiString
RtlAnsiStringToUnicodeString
//文件名 38.h
#define BUFFER_SIZE 1024
#pragma INITCODE
VOID CharTest()
{
KdPrint((Char字串测试--Start \n));
PCHAR s1=abc11; //CHAR ANSI
KdPrint((%x,%s\n,s1,s1));
PWSTR s2=Labc11; //WCHAR UNICODE //PWSTR
KdPrint((%x,%S\n,s2,s2));
KdPrint((Char字串测试--End \n));
_asm int 3
}
//ANSI_STRING
//UNICODE_STRING
//字符串初始化测试
#pragma INITCODE
VOID StringInitTest()
{
KdPrint((初始化字串测试--Start \n));
ANSI_STRING AnsiString1={0};
UNICODE_STRING UnicodeString1={0};
AnsiString1.Buffer=AnsiStri
原创力文档


文档评论(0)