现在的位置: 首页 > 综合 > 正文

驱动中字符串的操作

2013年07月26日 ⁄ 综合 ⁄ 共 1986字 ⁄ 字号 评论关闭

/如果本文有不对的地方,望即时指点!

字符串的初始化

定义一个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

抱歉!评论已关闭.