驅動中字符串的操作


/如果本文有不對的地方,望即時指點!

字符串的初始化

定義一個UNICODE_STRING類型的變量,這只是一個空的結構體而已,我們並沒有給它分配任何的內存。如果直接對其進行字符串拷貝等操作,肯定會 引起異常的,當我們定義這樣類型的一個變量,我們應該就把它看作一個WCHAR型的指針,沒有“new”空間,所以我們必須去“new”空間給它。

typedef struct

{

    USHORT Length;

    USHORT MaximumLength;

    PWCHAR Buffer;

}UNICODE_STRING, *PUNICODE_STRING;

有以下幾種方式:

1.RtlInitEmptyUnicodeString

UNICODE_STRING str;

WCHAR wcsBuffer[1024] = {0};

RtlEmptyUnicodeString(&str, wcsBuffer, sizeof(wcsBuffer));

這種方式就像定義一個靜態的串 WCHAR wcsBuffer[1024] = {0}。

2.動態申請空間

UNICODE_STRING str;

str.Buffer = (PWCHAR)ExAllocatePoolWithTag(NonpagePool, 1024, ‘1234’);

str.Length = 0;

str.MaximumLength = 1024;

這種方式就像定義一個WCHAR* pwcsBuffer = new WCHAR[1024];

使用完之后,必須釋放內存。

ExFreePool或者是ExFreePoolWithTag。

3.定義常量UNICODE_STRING

可以使用宏RTL_CONSTANT_STRING

UNICODE_STRING str = RTL_CONSTANT_STRING(L”my first string”);

記住這個字符串不能再被修改,因為這就像定義了char *str = “123”; 該字符串不能再被修改。

字符串的拷貝

RtlCopyUnicodeString(&dst, &src);

字符串的連接

RtlAppendUnicodeToString(&dst, L”123”);

RtlAppendUnicodeToUnicodeString(&dst, &src);

 

//下面的表格是轉載的,找不到出處了,見諒!

驅動中使用的字符串操作函數 ,這里給出ANSI和UNICODE的對比

操作

ANSI串函數

Unicode串函數

Length

Strlen

wcslen

Concatenate

Strcat

strncat

Wcscat

wcsncat

RtlAppendUnicodeStringToString

RtlAppendUnicodeToString

Copy

Strcpy

strncpy

RtlCopyString

Wcscpy

wcsncpy

TrlCopyUnicodeString

Reverse

_strrev

_wcsrev

Compare

Strcmp

Strncmp

_stricmp

_strnicmp

RtlCompareString

RtlEqualString

Wcscmp

Wcsncmp

_wcsicmp

_wcsnicmp

RtlCompareUnicodeString

RtlEqualUnicodeString

RtlPrefixUnicodeString

Initialize

_strset

_strnset

RtlInitAnsiString

RtlInitString

_wcsnset

RtlInitUnicodeString

Search

Strchr

strrchr

strspn

strstr

Wcschr

wcsrchr

wcsspn

wcsstr

Upper/Lowercase

_strlwr

_strupr

RtlUpperString,

_wcslwr

_wcsupr

RtlUpcaseUnicodeString

Character

isdigit

islower

isprint

isspace

isupper

isxdigit

tolower

toupper

RtlUpperChar

Towolower

towupper

RtlUpcaseUnicodeString

Format

Sprintf

vsprintf

_snprintf

_vsnprintf

Swprintf

_snwprintf

String Conversion

Atoi

Atoll

_itoa

_itow

RtlIntegerToUnicodeString

RtlUnicodeStringToInteger

Type conversion

RtlAnsiStringToUnicodeString

RtlAnsiStringToUnicodeString

RtlUnicodeStringToAnsiString

Memory Release

RtlFreeAnsiString

RtlFreeUnicodeString


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM