WDK7: Использование IoAttachDeviceToDeviceStack выдает предупреждение "Память должна быть сохранена" в PREfast
Я использую PREFast для проверки сборки кода драйвера для Windows7. Следующая строка кода
stackDeviceObject = IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject);
Выдает предупреждение:
warning 28107: The Memory 'deviceObject' must be held when calling 'IoAttachDeviceToDeviceStack'.
deviceObject получается с более ранним вызовом IoCreateDevice. Кто-нибудь знает, что означает это предупреждение и как от него избавиться?
В справке PREfast говорится: "Ресурс, который программа должна получить до вызова функции, не был получен при вызове функции. В результате вызов функции завершится ошибкой".
Пример, который предоставляет страница справки, окружает пару обращений к ExAcquireResourceLite и ExReleaseResourceLite (которая выдает это предупреждение) между вызовами KaEnterCriticalRegion и KaLeaveCriticalRegion, который затем предположительно избавляется от предупреждения, но я не знаю, как применить эту информацию к мой вызов IoAttachDeviceToDeviceStack.
Любой совет будет принят во внимание.
1 ответ
Я считаю, что у меня есть ответ на свой вопрос. Призыв к IoCreateDevice
был в отдельной функции, которая была вызвана из этой. Я думаю, что это мешало PREfast увидеть, что эта функция вызывается и deviceObject
правильно инициализировался перед вызовом IoAttachDeviceToDeviceStack
назывался.
Я переехал IoCreateDevice
вызов в ту же функцию, что и IoAttachDeviceToDeviceStack
и предупреждение ушло.
Спасибо всем, кто потратил время, читая это и пытаясь найти ответ.