2012-05-08 36 views
3

私はカーネルドライバで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ビットのビットはドライバーがテスト証明書によって署名されていること
  • 私は、カーネルデバッガでコードをトレース
  • コードがクラッシュすることはありませんが、ユーザーモードで呼び出すことはできません

明らかにわからないことは何ですか?

答えて

1

ドキュメントは

を言うIgnoreCaseTRUEであれば、Expressionは大文字でなければなりません。

コメントごとに、大文字と小文字の区別のパラメータが誤解されています。それはIgnoreCaseではなく、CaseSensitiveです。結果については

  1. 小文字のTRUEからIgnoreCaseセットで表現 -
  2. 小文字式が動作しません、FALSEからIgnoreCaseセット、大文字パターンは - 「受賞t一致
  3. 小文字の式IgnoreCaseTRUEに設定すると動作しません。
  4. 小文字の表現w TRUEにi番目IgnoreCaseセット - ない単一のものが働い

本当に運が悪い:)

+0

マーフィーは夜遅くに潜んでいることをもう一つの証拠を動作しません!それがうまくいって、 'J'aidéjàtestéçaet j'aidétestéça'と' * TE?TÉ* 'を一致させることができました。 – ixe013

+0

助けになるのはうれしい! J'adore le code、et al vous aimera en retour。デクスター・ル・コード、それ以外のデューティ・レ・ドス。 –