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 и предупреждение ушло.

Спасибо всем, кто потратил время, читая это и пытаясь найти ответ.

Другие вопросы по тегам