DDK提供了对ANSI_STRING字符串和UNICODE_STRING字符串的相关字符串大小写转化的函数。
1. ANSI_STRING字符串转化成大写。
VOID RtlUpperString{
IN OUT PSTRING DestinationString,
IN PSTRING SourceString
};
// DestinationString: 目的字符串。
// SourceString: 源字符串
2. UNICODE_STRING字符串转换成大写
NTSTATUS RtlUpCaseUnicodeString {
IN OUT PUNICODE_STRING DestinationString OPTIONAL,
IN PUNICODE_STRING SourceString,
IN BOOLEAN AllocateDestinationString
};
// DestinationString: 目的字符串
// SourceString: 源字符串
// AllocateDestinationString: 是否为目的字符串分配内存
// 返回值:返回转换是否成功
RtlUpCaseUnicodeString 函数比 RtlUpperString 函数多一个参数 AllocateDestinationString。 这个参数指定是否为目的字符串申请内存。目的字符串和源字符串可以是同一个字符串。
DDK虽然提供了转化成大写的函数,但却没有提供转化成小写的函数。下面的代码演示了如何使用RtlUpcaseUnicodeString函数。
// 初始化 UnicodeStr1
UNICODE_STRING UnicodeStr1;
RtlInitUnicodeString(&UnicodeStr1, L"Hello World");
// 变化前
KdPrint(("UnicodeStr1: %wZ\n", &UnicodeStr1));
// 转化成大小写
RtlUpcaseUnicodeString(&UnicodeStr1, &UnicodeStr1, FALSE);
// 变化后
KdPrint(("UnicodeStr1: %wZ\n", &UnicodeStr1));