Я выполняю строковое сопоставление в драйвере ядра с помощью Boyer-Moore algorithm, но мне также необходимо реализовать базовую поддержку подстановочных знаков. This answer on SO упоминает функцию FsRtlIsNameInExpression
, которая выглядит правильно для моих нужд. Он даже выглядит так, что он обрабатывает нечувствительность к регистру для строк Unicode.FsRtlIsNameInExpression никогда не соответствует ни одному
Но он не может даже заставить его соответствовать простой строке с собой.
Я пробовал несколько вещей, но 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)
- Драйвер работает в Virtual Box принимал Windows 7 Pro 64 биты на моей Windows 7 Ultimate 64 бит
- водитель подписывается сертификатом испытаний
- трассировать код в отладчик ядра
- Код не сбой, но не может быть вызван в пользовательском режиме
Что очевидно, что мне не хватает?
Еще одно доказательство того, что Мерфи таится поздно ночью! Он работает, я смог сопоставить 'J'ai déjà testé ça et j'ai détesté ça' с' * TE? TÉ * '. – ixe013
Рад помочь! J'adore le code, et al vous aimera en retour. Déteste le code, et il vous déteste le dos. –