私はカーネルドライバでBoyer-Moore algorithmを使用して文字列マッチングを行いますが、基本的なワイルドカードサポートも実装する必要があります。 This answer on SOは、私の必要性にちょうどよく見える機能FsRtlIsNameInExpression
を述べました。それは、Unicode文字列の大文字と小文字を区別しないように見えます。FsRtlIsNameInExpressionは何も一致しません
しかし、単純な文字列と一致するようにすることさえできません。
私はいくつか試しましたが、FsRtlIsNameInExpressionは何も一致しません。ここで私がテストに使用したコードをいくつか紹介します(DriverEntry
ルーチンの最後にMyTest
という呼出しをします)。レコードの
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の場合)
- ドライバが動作を確認Proの64のWindows 7ホストされています
- 私のWindows 7の究極の64ビットのビットはドライバーがテスト証明書によって署名されていること
- 私は、カーネルデバッガでコードをトレース
- コードがクラッシュすることはありませんが、ユーザーモードで呼び出すことはできません
明らかにわからないことは何ですか?
マーフィーは夜遅くに潜んでいることをもう一つの証拠を動作しません!それがうまくいって、 'J'aidéjàtestéçaet j'aidétestéça'と' * TE?TÉ* 'を一致させることができました。 – ixe013
助けになるのはうれしい! J'adore le code、et al vous aimera en retour。デクスター・ル・コード、それ以外のデューティ・レ・ドス。 –