内核模式下的字符串操作

代码:

	KdPrint(("ANSI:
"));
	CHAR *string = "Hello";
	KdPrint(("%s
",string));
	
	WCHAR *string2 = L"Hello2";
	KdPrint(("%S
",string2));
	
	ANSI_STRING ansistring ;
	CHAR *charstring = "hello";
	RtlInitAnsiString(&ansistring,charstring);


	KdPrint(("%Z
",&ansistring));
	charstring[0] = 'H';
	KdPrint(("%Z
",&ansistring));
	
	RtlInitAnsiString(&ansistring,"ansistring");
	
	KdPrint(("%Z
",&ansistring));


		KdPrint(("UNICODE:
"));
	UNICODE_STRING unicodestring;
	RtlInitUnicodeString(&unicodestring,L"unicodestring");
	KdPrint(("%wZ
",&unicodestring));


	KdPrint(("UNICODE 复制:
"));
	UNICODE_STRING unicodestring1;
	RtlInitUnicodeString(&unicodestring1,L"unicodestring can Copy!");


		UNICODE_STRING unicodestring2;
		unicodestring2.Buffer = (PWCHAR)ExAllocatePool(PagedPool,1024);
		unicodestring2.MaximumLength = 1024;


		RtlCopyUnicodeString(&unicodestring2,&unicodestring1);
		KdPrint(("UNICODE1 :   %wZ
",&unicodestring1));
		KdPrint(("UNICODE2 :   %wZ
",&unicodestring2));


		if (!RtlCompareUnicodeString(&unicodestring1,&unicodestring2,true))
		{
			KdPrint(("返回值等于0 代表 相同RtlCompareUnicodeString 比较相同"));
		}
		if (RtlEqualUnicodeString(&unicodestring1,&unicodestring2,true))
		{
			KdPrint(("返回值大于0 代表 相同RtlEqualUnicodeString 比较相同"));
		}
		RtlFreeUnicodeString(&unicodestring2);


		KdPrint(("UNICODE_STRING 转换为大写
"));
		
		RtlUpcaseUnicodeString(&unicodestring1,&unicodestring1,FALSE);
		KdPrint(("%wZ
",&unicodestring1));


		KdPrint(("UNICODE转数
"));
		
		UNICODE_STRING StrToInteger;
		RtlInitUnicodeString(&StrToInteger,L"-100");
		
		ULONG lNumber;
		NTSTATUS status2 = RtlUnicodeStringToInteger(&StrToInteger,10,&lNumber);
		
		if (NT_SUCCESS(status2))
		{
			KdPrint(("转换成功!  lNumber = %d
",lNumber));
		}
		else
			KdPrint(("转换失败!"));


		KdPrint(("数转UNICODE
"));
		UNICODE_STRING IntegerToStr = {0};
		IntegerToStr.Buffer = (PWCHAR)ExAllocatePool(PagedPool,1024);
		IntegerToStr.MaximumLength = 1024;


		status2 = RtlIntegerToUnicodeString(200,10,&IntegerToStr);
		
		if (NT_SUCCESS(status2))
		{
			KdPrint(("转换成功!  Str = %wZ
",&IntegerToStr));
		}
		else
			KdPrint(("转换失败"));
		
		
			KdPrint(("
"));
			UNICODE_STRING unicodestringToansistring;
			ANSI_STRING ansistring2;
			RtlInitUnicodeString(&unicodestringToansistring,L"UNICODETOANSISTRING");


			NTSTATUS status3 = RtlUnicodeStringToAnsiString(&ansistring2,&unicodestringToansistring,TRUE);


			if (NT_SUCCESS(status3))
			{
				KdPrint(("UNICODE转换ANSI 成功"));
				KdPrint(("%Z",&ansistring2));
			}
			else
				KdPrint(("UNICODE转换ANSI 失败"));


			RtlFreeAnsiString(&ansistring2);
// 			
			KdPrint(("
"));
			
			ANSI_STRING ansistring3;
			RtlInitAnsiString(&ansistring3,"ANSISTRINGTOUNICODE");


			UNICODE_STRING ansistringTounicodestring;
			NTSTATUS status4 = RtlAnsiStringToUnicodeString(&ansistringTounicodestring,&ansistring3,TRUE);
			
			if (NT_SUCCESS(status4))
			{
				KdPrint(("ANSI转换UNICODE 成功"));
				KdPrint(("%wZ",&ansistringTounicodestring));
			}
			else
				KdPrint(("ANSI转换UNICODE 失败"));
			
			RtlFreeUnicodeString(&ansistringTounicodestring);



原文地址:https://www.cnblogs.com/zcc1414/p/3982464.html