0

PREFast を使用して、Windows7 用のドライバー コード ビルドを確認しています。次のコード行

stackDeviceObject = IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject);

警告を表示します:

warning 28107: The Memory 'deviceObject' must be held when calling 'IoAttachDeviceToDeviceStack'.

deviceObject は、IoCreateDevice への以前の呼び出しで取得されます。この警告の意味と、それを取り除く方法を知っている人はいますか?

PREfast のヘルプには、「関数を呼び出す前にプログラムが取得しなければならないリソースが、関数の呼び出し時に取得されませんでした。その結果、関数呼び出しは失敗します。」と記載されています。

ヘルプページが提供する例は、KaEnterCriticalRegion と KaLeaveCriticalRegion への呼び出しの間の ExAcquireResourceLite と ExReleaseResourceLite (この警告を与える) への呼び出しのペアを囲んでおり、おそらく警告を取り除きますが、この情報をに適用する方法がわかりませんIoAttachDeviceToDeviceStack への私の呼び出し。

アドバイスをいただければ幸いです。

4

1 に答える 1

0

私は自分自身の質問に対する答えを持っていると信じています。への呼び出しIoCreateDeviceは、この関数から呼び出された別の関数で行われました。deviceObjectこれにより、この関数が呼び出され、への呼び出しが呼び出される前に正しく初期化されていたことを PREfast が認識できなくなっていたと思いますIoAttachDeviceToDeviceStack

IoCreateDevice呼び出しを と同じ関数に移動したIoAttachDeviceToDeviceStackところ、警告は消えました。

これを読んで答えを見つけようとして時間を費やしてくれた人に感謝します。

于 2013-01-11T16:39:52.850 に答える