ひとこと

― 今日のひとこと ―
印刷情報取得モジュールをアップロードしました。
https://bitbucket.org/marolabo/public
(2018.02.20)

2018年1月4日木曜日

Mini-FilterDriverのHLK対策 -OpLock-

Microsoftがドライバのサンプルを公開していますが、
その内のひとつであるscannerに対してHLKテストなんかでIFS TestやらOpLocks Testを実施すると、
おそらく失敗します。だってOpLock対策が不十分だから。

IRP_MJ_CREATEに関してMicrosoftが公開しているドキュメントなどにあるように、
フラグ判定を2か所に追加しなければなりません。

1.Pre-CreateでのFILE_COMPLETE_IF_OPLOCKED判定
if (FlagOn(Data->Iopb->Parameters.Create.Options, FILE_COMPLETE_IF_OPLOCKED))
return FLT_PREOP_SUCCESS_NO_CALLBACK;

2.Post-CreateでのSTATUS_OPLOCK_BREAK_IN_PROGRESS判定
if (FlagOn(Data->Iopb->Parameters.Create.Options, FILE_COMPLETE_IF_OPLOCKED)
&& Data->IoStatus.Status == STATUS_OPLOCK_BREAK_IN_PROGRESS)
return FLT_POSTOP_FINISHED_PROCESSING;

ただ、実はこれだけではIFS TestはPassできてもOpLocks TestはPassできません。
検証10-8でPost-Create時にFltReadFile()が実行されるとNTFSからの応答が途絶え、
FltReadFile()が完了せずハングアップしてしまうのです・・・。
(試験も手動で中断させるまで止まったままになるし結果は当然Failed)

Microsoft製のプログラムなのにMicrosoftの試験に落ちるってどういうことなの
ハードウェアの問題なのかな?あまり深く調べてないけどもう力尽きました。

以上、職場のWindowsServer2016でなんとなくHLKテストを実施してみた時の話でした。

0 件のコメント:

コメントを投稿