Набор правил IrpTracking (WDM)
Используйте эти правила, чтобы убедиться, что драйвер правильно отслеживает пакеты запросов ввода-вывода (IRP), чтобы устройство не было удалено во время выполнения операций irPs.
В этом разделе
Раздел | Описание |
---|---|
Правило IoReleaseRemoveLockAndWaitOutsideRemoveDevice указывает, что IoReleaseRemoveLockAndWait не следует вызывать вне IRP_MJ_PNP с IRP_MN_REMOVE_DEVICE для драйвера PnP. |
|
Правило NsRemoveLockMnRemove проверяет, что драйвер не возвращает STATUS_NOT_SUPPORTED при обработке IRP_MJ_PNP с помощью minorFunction IRP_MN_REMOVE_DEVICE. Это правило применяется только к драйверам FDO и FIDO. |
|
Правило NsRemoveLockMnSurpriseRemove проверяет, что драйвер не возвращает STATUS_NOT_SUPPORTED при обработке запроса IRP_MJ_PNP с дополнительными IRP_MN_SUPRISE_REMOVAL. Это правило применяется только к драйверам FDO и FIDO. |
|
Правило NsRemoveLockQueryMnRemove проверяет, что драйвер не возвращает STATUS_NOT_SUPPORTED при обработке IRP_MJ_PNP с помощью IRP_MN_QUERY_REMOVE MinorFunction. Это правило применяется только к драйверам FDO и FIDO. |
|
Правило RemoveLock указывает, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно. Кроме того, в конце IRP_MJ_PNP или IRP_MJ_POWER подпрограмме драйвер не должен удерживать RemoveLock. |
|
Правило RemoveLockCheck проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLockAndWait при обработке IRP_MJ_PNP с помощью дополнительных IRP_MN_REMOVE_DEVICE. |
|
Правило RemoveLockForward проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при переадресации IRP на другое устройство. |
|
Правило RemoveLockForward2 проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при переадресации IRP на другое устройство. |
|
Правило RemoveLockForwardDeviceControl проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно, когда драйвер использует IoCallDriver для пересылки IRP на другое устройство. |
|
Правило RemoveLockForwardDeviceControl2 проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно, когда драйвер использует IoCallDriver для пересылки IRP на другое устройство. |
|
Правило RemoveLockForwardDeviceControlInternal проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно при пересылке IRP с помощью IoCallDriver на другое устройство. |
|
Правило RemoveLockForwardDeviceControlInternal2 проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно при переадресации IRP с помощью IoCallDriver на другое устройство. |
|
Правило RemoveLockForwardRead проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock. |
|
Правило RemoveLockForwardRead2 проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при переадресации IRP с помощью IoCallDriver на другое устройство. |
|
Правило RemoveLockForwardWrite проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при переадресации IRP с помощью IoCallDriver на другое устройство. |
|
Правило RemoveLockForwardWrite2 проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при пересылке IRP с помощью IoCallDriver на другое устройство. |
|
Правило RemoveLockMnRemove проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLockAndWait используются правильно при обработке IRP_MJ_PNP с помощью minorFunction IRP_MN_REMOVE_DEVICE. |
|
Правило RemoveLockMnRemove2 проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLockAndWait используются правильно при обработке запроса IRP_MN_REMOVE_DEVICE перед перенаправлением IRP в более низкие драйверы. |
|
Правило RemoveLockMnSurpriseRemove проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLockAndWait используются правильно при обработке IRP_MJ_PNP с помощью minorFunction IRP_MN_SUPRISE_REMOVAL. Драйвер должен получить блокировку удаления перед пересылкой IRP вниз стека. |
|
Правило RemoveLockQueryMnRemove проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при обработке IRP_MJ_PNP с помощью дополнительных IRP_MN_QUERY_REMOVE_DEVICE. Драйвер должен получить блокировку удаления перед пересылкой IRP вниз стека. |
|
Правило RemoveLockRelease2 проверяет, используются ли вызовы IoAcquireRemoveLock и IoReleaseRemoveLock в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseCleanup указывает, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Каждый вызов IoAcquireRemoveLock должен иметь соответствующий вызов IoReleaseRemoveLock. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseClose проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseCreate проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseDeviceControl проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseInternalDeviceControl проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleasePnp проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleasePower проверяет, используются ли вызовы IoAcquireRemoveLock и IoReleaseRemoveLock в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseRead проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseShutdown проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseSystemControl проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
|
Правило RemoveLockReleaseWrite проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления. |
Выбор набора правил IrpTracking
Выберите проект драйвера (.vcxProj) в Microsoft Visual Studio. В меню "Драйвер" нажмите кнопку "Запустить средство проверки статического драйвера...".
Перейдите на вкладку "Правила ". В разделе "Наборы правил" выберите IrpTracking.
Чтобы выбрать набор правил по умолчанию в окне командной строки разработчика Visual Studio, укажите IrpTracking.sdv с параметром /проверка. Например:
msbuild /t:sdv /p:Inputs="/check:IrpTracking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Дополнительные сведения см. в статье "Использование средства проверки статических драйверов для поиска дефектов в драйверах и командах средства проверки статических драйверов( MSBuild)".