3.5 字符串操作

来源:互联网 发布:中兴笔试编程题 编辑:程序博客网 时间:2024/06/03 17:42

ANSI_STRING和UNICODE_STRING操作


3.5.1 STRING、ANSI_STRING和UNICODE_STRING

STRING和ANSI_STRING是同一种数据结构,都是对ASCII字符的封装;UNICODE_STRING是对Unicode字符的封装

STRING的数据结构为:

typedef strunct _STRING{

__maybevalid USHORT Length;

__maybevaild USHORT MaximumLength;

#ifdef MIDL_PASS

[size_is(MaximumLength), length_is(Length)]

#endif // MIDL_PASS

__field_bcount_part_opt(MaximumLength, Length) PCHAR Buffer;

} STRING;

typedef STRING *PSTRING;

typedef STRING ANSI_STRING;

typedef STRING PANSI_STRING;

可见STRING和ANSI_STRING是同一种数据结构的两个名称

UNICODE_STRING的数据结构为:

typedef struct _UNICODE_STRING{

USHORT Length;

USHORT MaximumLength;

#ifdef MIDL_PASS

[size_is(MaximumLenght / 2), length_is((Length) / 2)] USHORT * Buffer;

#else // MIDL_PASS

__field_bcount_part (MaximumLength, Length) PWCH Buffer;

#endif // MIDL_PASS

} UNICODE_STRING;

typedef UNICODE_STRING *PUNICODE_STRING;


3.5.2 初始化和销毁

1.ANSI_STRING的初始化操作函数:RtlInitAnsiString和RtlInitString

2.ANSI_STRING的销毁函数:RtlFreeAnsiString

3.UNICODE_STRING的初始化函数:RtlInitUnicodeString

4.UNICODE_STRING的销毁函数:RtlFreeUnicodeString


3.5.3 复制和添加

1.ANSI_STRING的拷贝函数:RtlCopyString

2.UNICODE_STRING的拷贝函数:RtlCopyUnicodeString

3.UNICODE_STRING的添加函数:RtlAppendUnicodeStringToString和RtlAppendUnicodeToString


3.5.4 比较

1.ANSI_STRING的比较函数:RtlEqualString和RtlCompareString

2.UNICODE_STRING的比较函数:RtlEqualUnicodeString和RtlCompareUnicodeString


3.5.5 转换

1.ANSI_STRING的转换函数:RtlAnsiStringToUnicodeString,获取转换内容需要空间RtlAnsiStringToUnicodeSize、STRING内容全转大写RtlUpperString

2.UNICODE_STRING的转换函数:RtlUnicodeStringToAnsiString,UNICODE_STRING内容全转大写RtlUpcaseUnicodeString

原创粉丝点击