gpt4 book ai didi

c - FsRtlIsNameInExpression 从不匹配任何内容

转载 作者:行者123 更新时间:2023-12-04 02:42:28 32 4
gpt4 key购买 nike

我使用 Boyer-Moore algorithm 在内核驱动程序中进行字符串匹配,但我还需要实现基本的通配符支持。 This answer on 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 中运行
  • 驱动程序由测试证书签名
  • 我在内核调试器中跟踪代码
  • 代码没有崩溃,但是在用户态无法调用

  • 我失踪的明显原因是什么?

    最佳答案

    文档说

    If IgnoreCase is TRUE, Expression must be uppercase.



    请注意,根据您的评论,您误解了区分大小写的参数。是 IgnoreCase不是 CaseSensitive .

    至于结果:
  • 带有 IgnoreCase 的小写表达式设置为 TRUE - 不能用
  • 小写表达式,IgnoreCase设置为 FALSE , 大写模式 - 不匹配
  • 带有 IgnoreCase 的小写表达式设置为 TRUE - 不能用
  • 带有 IgnoreCase 的小写表达式设置为 TRUE - 不能用

  • 真的很不幸,没有一个成功:)

    关于c - FsRtlIsNameInExpression 从不匹配任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10492118/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com