我使用Boyer-Moore 算法在内核驱动程序中进行字符串匹配,但我还需要实现基本的通配符支持。这个关于SO的答案提到了函数FsRtlIsNameInExpression
,它看起来正好适合我的需要。它甚至看起来像处理 Unicode 字符串的大小写不敏感。
但它甚至不能让它与自己匹配一个简单的字符串。
我尝试了一些东西,但 FsRtlIsNameInExpression 从来没有匹配任何东西。这是我用来测试的一些代码(我把调用放在MyTest
我的DriverEntry
例程结束时)。
NTSTATUS MyTest()
{
int matches = 0;
UNICODE_STRING a3times;
UNICODE_STRING A5times;
UNICODE_STRING bbb;
UNICODE_STRING patterna;
UNICODE_STRING patternb;
RtlInitUnicodeString(&a3times, L"aaa");
RtlInitUnicodeString(&A5times, L"AAAAA");
RtlInitUnicodeString(&bbb, L"bbb");
RtlInitUnicodeString(&patterna, L"a*a");
RtlInitUnicodeString(&patternb, L"b*");
if(FsRtlIsNameInExpression(&patterna, &a3times, TRUE, 0))
++matches; // a*a should match aaa
if(FsRtlIsNameInExpression(&patterna, &A5times, FALSE, 0))
++matches; // a*a should match (insensitive) AAAAA
if(FsRtlIsNameInExpression(&a3times, &a3times, TRUE, 0))
++matches; //aaa should match aaa
if(FsRtlIsNameInExpression(&patternb, &bbb, TRUE, 0))
++matches; //b* should match bbb
return matches; //Should be 4, but is 0
}
作为记录 :
- 我正在使用 WDK 版本 7600.16385.1,检查构建(我的代码,不是 Windows)
- 该驱动程序在我的 Windows 7 Ultimate 64 位上托管 Windows 7 Pro 64 位的 Virtual Box 中运行
- 驱动程序由测试证书签名
- 我在内核调试器中跟踪代码
- 代码不会崩溃,但不能在用户态调用
我缺少什么明显的东西?