您的位置:首页 > 其它

内核模式下的字符串操作

2013-11-19 00:56 411 查看
VOID StringTest()
{
// ASCII 字符串
CHAR* char1="Hello,World";
KdPrint(("char1=%s\r\n",char1));

// 宽字符字符串
WCHAR* wchar1=L"Hello,World";
KdPrint(("wchar1=%ws\r\n",wchar1));
KdPrint(("wchar1=%S\r\n",wchar1));

// 内核模式下的ANSI字符串
ANSI_STRING ansistring;
RtlInitAnsiString(&ansistring,char1);
KdPrint(("ansistring=%Z\r\n",&ansistring));
KdPrint(("ansistring长度=%d",ansistring.Length));
RtlInitAnsiString(&ansistring,"KERNEL");
KdPrint(("ansistring=%Z\r\n",&ansistring));
KdPrint(("ansistring长度=%d",ansistring.Length));

// 内核模式下的UNICODE字符串
UNICODE_STRING unicodestring;
RtlInitUnicodeString(&unicodestring,wchar1);
KdPrint(("unicodestring=%wZ\r\n",&unicodestring));
KdPrint(("unicodestring.length=%d",unicodestring.Length));
RtlInitUnicodeString(&unicodestring,L"KERNEL");
KdPrint(("unicodestring=%wZ\r\n",&unicodestring));
KdPrint(("unicodestring.length=%d",unicodestring.Length));

// 内核模式下的ANSI字符串拷贝
ANSI_STRING ansistring1;
ansistring1.Length=0;
ansistring1.Buffer=(CHAR*)ExAllocatePool(PagedPool,1024);
ansistring1.MaximumLength=1024;
KdPrint(("拷贝前ansistring1=%Z\r\n",&ansistring1));
KdPrint(("拷贝前ansistring1.length=%d",ansistring1.Length));
KdPrint(("拷贝前ansistring1.MaxLength=%d",ansistring1.MaximumLength));
RtlCopyString(&ansistring1,&ansistring);
KdPrint(("拷贝后ansistring1=%Z\r\n",&ansistring1));
KdPrint(("拷贝后ansistring1.length=%d",ansistring1.Length));
KdPrint(("拷贝后ansistring1.MaxLength=%d",ansistring1.MaximumLength));
RtlFreeAnsiString(&ansistring1);

// 内核模式下的UNICODE字符串拷贝
UNICODE_STRING unicodestring1;
unicodestring1.Length=0;
unicodestring1.MaximumLength=1024;
unicodestring1.Buffer=(WCHAR*)ExAllocatePool(PagedPool,1024);
KdPrint(("拷贝前unicodestring1=%wZ\r\n",&unicodestring1));
KdPrint(("拷贝前unicodestring1.Length=%d\r\n",unicodestring1.Length));
KdPrint(("拷贝前unicodestring1.MaximumLength=%d\r\n",unicodestring1.MaximumLength));
RtlCopyUnicodeString(&unicodestring1,&unicodestring);
KdPrint(("拷贝后unicodestring1=%wZ\r\n",&unicodestring1));
KdPrint(("拷贝后unicodestring1.Length=%d\r\n",unicodestring1.Length));
KdPrint(("拷贝后unicodestring1.MaximumLength=%d\r\n",unicodestring1.MaximumLength));
RtlFreeUnicodeString(&unicodestring1);

// 内核模式下的ANSI字符串比较
ANSI_STRING ansistring2;
RtlInitAnsiString(&ansistring2,"YJZ");
LONG lRet=RtlCompareString(&ansistring,&ansistring2,TRUE);
KdPrint(("ansistring=%Z\r\n",&ansistring));
KdPrint(("ansistring2=%Z\r\n",&ansistring2));
KdPrint(("比较结果=%d\r\n",lRet));

// 字符串转换为大写
ANSI_STRING ansistr;
RtlInitAnsiString(&ansistr,"Hello,World");
ANSI_STRING ansistr1;
ansistr1.MaximumLength=ansistr.Length;
ansistr1.Buffer=(CHAR*)ExAllocatePool(PagedPool,ansistr1.MaximumLength);
RtlUpperString(&ansistr1,&ansistr);
KdPrint(("%Z转换为大写=%Z\r\n",&ansistr,&ansistr1));
RtlFreeAnsiString(&ansistr1);
UNICODE_STRING unicodestr,unicodestr1;
RtlInitUnicodeString(&unicodestr,L"Hello,World");
RtlUpcaseUnicodeString(&unicodestr1,&unicodestr,TRUE);
KdPrint(("%wZ转换为大写=%wZ",&unicodestr,&unicodestr1));
RtlFreeUnicodeString(&unicodestr1);

// 字符串与整形转换
UNICODE_STRING ustr;
ULONG lValue=0;
RtlInitUnicodeString(&ustr,L"-100");
if (NT_SUCCESS(RtlUnicodeStringToInteger(&ustr,10,&lValue)))
{
KdPrint(("%wZ转换为整形后=%d\r\n",&ustr,lValue));
}
ustr.Buffer=(WCHAR*)ExAllocatePool(PagedPool,256);
if (NT_SUCCESS(RtlIntegerToUnicodeString(200,10,&ustr)))
{
KdPrint(("%d转换为字符串之后=%wZ,长度=%d\r\n",200,&ustr,ustr.Length));
}

// ANSI_STRING 与UNICODE_STRING互相转换
ANSI_STRING ansistr2;
RtlInitAnsiString(&ansistr2,"Hello,World");
UNICODE_STRING unicodestr2;
if (NT_SUCCESS(RtlAnsiStringToUnicodeString(&unicodestr2,&ansistr2,TRUE)))
{
KdPrint(("AnsiString:%Z转换为UnicodeString后为:%wZ\r\n",&ansistr2,&unicodestr2));
RtlFreeUnicodeString(&unicodestr2);
}

UNICODE_STRING ustr3;
RtlInitUnicodeString(&ustr3,L"Hello,World");
ANSI_STRING ansistr3;
if (NT_SUCCESS(RtlUnicodeStringToAnsiString(&ansistr3,&ustr3,TRUE)))
{
KdPrint(("UNICODE_STRING:%wZ转换为ANSI_STRING之后=%Z\r\n",&ustr3,&ansistr3));
RtlFreeAnsiString(&ansistr3);
}


 转自  :http://blog.csdn.net/yjz1409276/article/details/7292501
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: