字符串相关

来源:互联网 发布:数据机房设计规范 编辑:程序博客网 时间:2024/04/30 01:06
#include <ntddk.h>void Unload(IN PDRIVER_OBJECT DriverObject);#ifdef __cplusplusextern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath);#endifvoid StringInitTest(void);void StringCopyTest(void);//字符串拷贝void StringCompareTest(void);//比较两个UNICODE字符串是否相等void StringToUpperTest(void);//字符串转换大写void StringToInteggerTest(void);//字符串数字相互转换void StringConvertest(void);//UNICODE和ANSI转换NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath){unsigned i;DbgPrint("Hello from 1!\n");DriverObject->DriverUnload =Unload;#if DBG_asm int 3#endifStringInitTest();StringCopyTest();StringCompareTest();//StringToUpperTest();--貌似不行。原因没找到StringToInteggerTest();StringConvertest();return STATUS_SUCCESS;}void Unload(IN PDRIVER_OBJECT DriverObject){DbgPrint("Goodbye from 1!\n");}void StringInitTest(void){//1、用RtlInitAnsiString初始化字符串ANSI_STRING AnsiString1;CHAR string1[]="hello";RtlInitAnsiString(&AnsiString1,string1);DbgPrint("%Z\n",&AnsiString1);string1[0]='H';//error 蓝屏了string1[1]='E';string1[2]='L';string1[3]='L';string1[4]='O';//改变string1的值,AnsiString1同样会导致变化DbgPrint("%Z\n",&AnsiString1);//2、程序员自己初始化字符串#define BUFFER_SIZE1024UNICODE_STRING UnicodeString1={0};//设置缓冲区大小UnicodeString1.MaximumLength=BUFFER_SIZE;//分配内存UnicodeString1.Buffer=(PWSTR)ExAllocatePool(PagedPool,BUFFER_SIZE);WCHAR* wideString=L"hello";//设置字符长度,应为是宽字符,所以是字符长度的2倍UnicodeString1.Length=2*wcslen(wideString);//保证缓冲区足够大,否则程序终止ASSERT(UnicodeString1.MaximumLength>=UnicodeString1.Length);if (UnicodeString1.MaximumLength<UnicodeString1.Length){ASSERT(FALSE);return;}//内存拷贝RtlCopyMemory(UnicodeString1.Buffer,wideString,UnicodeString1.Length);//设置字符长度UnicodeString1.Length=2*wcslen((wideString));DbgPrint(TEXT("%wZ\n"),&UnicodeString1);//清理内存ExFreePool(UnicodeString1.Buffer);UnicodeString1.Buffer=NULL;UnicodeString1.Length=UnicodeString1.MaximumLength=0;return;}//字符串拷贝void StringCopyTest(void){//初始化UnicodeString1UNICODE_STRING UnicodeString1;RtlInitUnicodeString(&UnicodeString1,L"Hello World!");//初始化UnioceString2UNICODE_STRING UnicodeString2={0};UnicodeString2.Buffer=(PWSTR)ExAllocatePool(PagedPool,BUFFER_SIZE);UnicodeString2.MaximumLength=BUFFER_SIZE;//初始化UnicodeString拷贝到UnicdeString1RtlCopyUnicodeString(&UnicodeString2,&UnicodeString1);//分别显示UnicodeString1和UnicodeString2DbgPrint(TEXT("%wZ\n"),UnicodeString1);DbgPrint(TEXT("%wZ\n"),UnicodeString2);//销毁UnicodeString2//注意UnicodeString1不用销毁RtlFreeUnicodeString(&UnicodeString2);return;}//比较两个UNICODE字符串是否相等void StringCompareTest(void){//初始化UnicodeString1UNICODE_STRING UnicdeSting1;RtlInitUnicodeString(&UnicdeSting1,L"Hello World");//初始化UnicodeString2UNICODE_STRING UnicodeString2;RtlInitUnicodeString(&UnicodeString2,L"Hello");//比较两个UNICODE字符串是否相等if (RtlEqualUnicodeString(&UnicdeSting1,&UnicodeString2,TRUE)){DbgPrint(TEXT("OK\n"));}else{DbgPrint(TEXT("NO\n"));}return;}//字符串转换大写void StringToUpperTest(void){//初始化UnicodeString1UNICODE_STRING UnicodeString1;RtlInitUnicodeString(&UnicodeString1,L"Hello World");//变化前DbgPrint(TEXT("变化前%wZ\n"),&UnicodeString1);//变大写RtlUpcaseUnicodeString(&UnicodeString1,&UnicodeString1,FALSE);//变化后DbgPrint(TEXT("变化后%wZ\n"),&UnicodeString2);return;}//字符串数字相互转换void StringToInteggerTest(void){//1、字符串转换成数字//初始化UnicodeString1UNICODE_STRING UnicodeString1;RtlInitUnicodeString(&UnicodeString1,L"-100");ULONG lNumber=0;NTSTATUS ntstatis=RtlUnicodeStringToInteger(&UnicodeString1,10,&lNumber);if (ntstatis==STATUS_SUCCESS){DbgPrint(TEXT("%d\n"),lNumber);}else{DbgPrint(TEXT("转换失败\n"));}//2、数字转换成字符串//初始化UnicodeString2UNICODE_STRING UnicodeString2={0};UnicodeString2.Buffer=(PWSTR)ExAllocatePool(PagedPool,BUFFER_SIZE);UnicodeString2.MaximumLength=BUFFER_SIZE;ntstatis=RtlIntegerToUnicodeString(200,10,&UnicodeString2);if (ntstatis==STATUS_SUCCESS){DbgPrint(TEXT("%wZ\n"),&UnicodeString2);}else{DbgPrint(TEXT("转换失败2"));}//销毁unicodestring2//注意unicodestring1不用销毁RtlFreeUnicodeString(&UnicodeString2);return;}//UNICODE和ANSI转换void StringConvertest(void){//1、将UNICODE_STRING字符串转换成ANSI_STRING字符串//初始化UnicodeString1UNICODE_STRING UnicodeString1;RtlInitUnicodeString(&UnicodeString1,L"Hello World");ANSI_STRING AnsiString1;NTSTATUS ntstatus=RtlUnicodeStringToAnsiString(&AnsiString1,&UnicodeString1,TRUE);if (ntstatus==STATUS_SUCCESS){DbgPrint("%Z\n",&AnsiString1);}else{DbgPrint(TEXT("转换失败"));}//销毁AnsiString1RtlFreeAnsiString(&AnsiString1);//2、将ANSI_STRING字符串转换成UNICODE_STRING字符串//初始化AnsiString2ANSI_STRING AnsiString2;RtlInitString(&AnsiString1,"Hello World");UNICODE_STRING UnicodeString2;ntstatus=RtlAnsiStringToUnicodeString(&UnicodeString2,&AnsiString2,TRUE);if (ntstatus==STATUS_SUCCESS){DbgPrint(TEXT("%wZ\n",UnicodeString2));}else{DbgPrint(TEXT("转换失败"));}//销毁UnicodeString2RtlFreeUnicodeString(&UnicodeString2);return;}




FunctionsPurposeReplacesRtlStringCbCat RtlStringCbCatEx RtlStringCchCat RtlStringCchCatEx RtlUnicodeStringCat RtlUnicodeStringCatEx RtlUnicodeStringCatString RtlUnicodeStringCatStringEx RtlUnicodeStringCbCatStringN RtlUnicodeStringCbCatStringNEx RtlUnicodeStringCchCatStringN RtlUnicodeStringCchCatStringNEx连接两个字符串。strcatwcscatRtlStringCbCatN RtlStringCbCatNEx RtlStringCchCatN RtlStringCchCatNEx RtlUnicodeStringCbCatN RtlUnicodeStringCbCatNEx RtlUnicodeStringCchCatN RtlUnicodeStringCchCatNEx连接两个以字节来计数的字符串,并限制附加字符串的大小。strncatwcsncatRtlStringCbCopy RtlStringCbCopyEx RtlStringCbCopyUnicodeString RtlStringCbCopyUnicodeStringEx RtlStringCchCopy RtlStringCchCopyEx RtlStringCchCopyUnicodeString RtlStringCchCopyUnicodeStringEx RtlUnicodeStringCopy RtlUnicodeStringCopyEx RtlUnicodeStringCopyString RtlUnicodeStringCopyStringEx将一个字符串复制到缓冲区中。strcpywcscpyRtlStringCbCopyN RtlStringCbCopyNEx RtlStringCchCopyN RtlStringCchCopyNEx RtlUnicodeStringCbCopyN RtlUnicodeStringCbCopyNEx RtlUnicodeStringCchCopyN RtlUnicodeStringCchCopyNEx RtlUnicodeStringCbCopyStringN RtlUnicodeStringCbCopyStringNEx RtlUnicodeStringCchCopyStringN RtlUnicodeStringCchCopyStringNEx将一个字符串复制到缓冲区中,并限制被复制字符串的大小。strncpywcsncpyRtlStringCbLength RtlStringCchLength RtlUnalignedStringCbLength RtlUnalignedStringCchLength计算字符串的长度。strlenwcslenRtlStringCbPrintf RtlStringCbPrintfEx RtlStringCchPrintf RtlStringCchPrintfEx RtlUnicodeStringPrintf RtlUnicodeStringPrintfEx创建一个格式化文本字符串,这基于一个格式字符串和多个额外的函数参数。printswprintf_snprintf_snwprintfRtlStringCbVPrintf RtlStringCbVPrintfEx RtlStringCchVPrintf RtlStringCchVPrintfEx RtlUnicodeStringVPrintf RtlUnicodeStringVPrintfEx创建一个格式化文本字符串,这基于一个格式字符串和一个额外的函数参数。vsprintfvswprintf_vsnprintf_vsnwprintfRtlUnicodeStringInit RtlUnicodeStringInitEx RtlUnicodeStringValidate RtlUnicodeStringValidateEx初始化或验证一个UNICODE_STRING结构。None


0 0