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是在一个单独的函数中调用的。我认为这阻止了 PREfast 看到这个函数被调用并且deviceObject在调用被调用之前被正确初始化IoAttachDeviceToDeviceStack

我已将呼叫移至与警告IoCreateDevice相同的功能中。IoAttachDeviceToDeviceStack

感谢任何花时间阅读本文并试图找到答案的人。

于 2013-01-11T16:39:52.850 回答