DDK提供对ANSI_STRING字符串和UNICODE_STRING字符串的相关字符串比较的命令,分别是ANSI_STRING字符串比较函数和UNICODE_STRING字符串比较函数。
LONG RtlCompareString {
IN PSTRING str1,
IN PSTRING str2,
BOOLEAN CaseInSensitive
};
// str1: 要比较的第一个字符串
// str2: 要比较的第二个字符串
// CaseInSensitive: 是否对大小写敏感
// 返回值: 比较结果
LONG RtlCompareUnicodeString {
IN PSTRING str1,
IN PSTRING str2,
BOOLEAN CaseInSensitive
};
// str1: 要比较的第一个字符串
// str2: 要比较的第二个字符串
// CaseInSensitive: 是否对大小写敏感
// 返回值: 比较结果
这两个函数的参数形式相同,以RtlCompareUnicodeString为例,前两个参数分别是需要比较的字符串,第三参数是指定是否对大小写敏感。如果函数返回为0,表示两个字符串相等。如果小于零,则表示第一个字符串小于第二个字符串反之。反之,如果大于零,则代表第一个字符串大于第二个字符串。
同时DDK又提供了RtlEqualString和RtlEqualUnicodeString函数,其使用方法和上面两个函数类似。只是返回为非零代表相等,零代表不相等。
下面的代码演示了如何使用RtlCompareUnicodeString函数。
// 初始化 UnicodeStr1;
UNICODE_STRING UnicodeStr1;
RtlInitUnicodeString(&UnicodeStr1, L"Hello World");
// 初始化 UnicodeStr2
UNICODE_STRING UnicodeStr2;
RtlInitUnicodeString(&UnicodeStr2, L"Hello");
// 判断字符串是否相等
if(RtlEqualUnicodeString(&UnicodeStr1, &UnicodeStr2, TRUE))
{
KdPrint(("UnicodeStr1 and UnicodeStr2 are equal\n"));
}
else
{
KdPrint(("UnicodeStr1 and UnicodeStr2 are NOT equal\n"));
}