驅動中字符串的操做

/若是本文有不對的地方,望即時指點!css

字符串的初始化git

定義一個UNICODE_STRING類型的變量,這只是一個空的結構體而已,咱們並無給它分配任何的內存。若是直接對其進行字符串拷貝等操做,確定會 引發異常的,當咱們定義這樣類型的一個變量,咱們應該就把它看做一個WCHAR型的指針,沒有「new」空間,因此咱們必須去「new」空間給它。函數

typedef structspa

{指針

    USHORT Length;code

    USHORT MaximumLength;orm

    PWCHAR Buffer;內存

}UNICODE_STRING, *PUNICODE_STRING;ci

有如下幾種方式:字符串

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

相關文章
相關標籤/搜索