Поделиться через


Набор правил IrpTracking (WDM)

Используйте эти правила, чтобы убедиться, что драйвер правильно отслеживает пакеты запросов ввода-вывода (IRP), чтобы устройство не было удалено во время выполнения операций irPs.

В этом разделе

Раздел Описание

IoReleaseRemoveLockAndWaitOutsideRemoveDevice

Правило IoReleaseRemoveLockAndWaitOutsideRemoveDevice указывает, что IoReleaseRemoveLockAndWait не следует вызывать вне IRP_MJ_PNP с IRP_MN_REMOVE_DEVICE для драйвера PnP.

NsRemoveLockMnRemove

Правило NsRemoveLockMnRemove проверяет, что драйвер не возвращает STATUS_NOT_SUPPORTED при обработке IRP_MJ_PNP с помощью minorFunction IRP_MN_REMOVE_DEVICE. Это правило применяется только к драйверам FDO и FIDO.

NsRemoveLockMnSurpriseRemove

Правило NsRemoveLockMnSurpriseRemove проверяет, что драйвер не возвращает STATUS_NOT_SUPPORTED при обработке запроса IRP_MJ_PNP с дополнительными IRP_MN_SUPRISE_REMOVAL. Это правило применяется только к драйверам FDO и FIDO.

NsRemoveLockQueryMnRemove

Правило NsRemoveLockQueryMnRemove проверяет, что драйвер не возвращает STATUS_NOT_SUPPORTED при обработке IRP_MJ_PNP с помощью IRP_MN_QUERY_REMOVE MinorFunction. Это правило применяется только к драйверам FDO и FIDO.

RemoveLock

Правило RemoveLock указывает, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно. Кроме того, в конце IRP_MJ_PNP или IRP_MJ_POWER подпрограмме драйвер не должен удерживать RemoveLock.

RemoveLockCheck

Правило RemoveLockCheck проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLockAndWait при обработке IRP_MJ_PNP с помощью дополнительных IRP_MN_REMOVE_DEVICE.

RemoveLockForward

Правило RemoveLockForward проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при переадресации IRP на другое устройство.

RemoveLockForward2

Правило RemoveLockForward2 проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при переадресации IRP на другое устройство.

RemoveLockForwardDeviceControl

Правило RemoveLockForwardDeviceControl проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно, когда драйвер использует IoCallDriver для пересылки IRP на другое устройство.

RemoveLockForwardDeviceControl2

Правило RemoveLockForwardDeviceControl2 проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно, когда драйвер использует IoCallDriver для пересылки IRP на другое устройство.

RemoveLockForwardDeviceControlInternal

Правило RemoveLockForwardDeviceControlInternal проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно при пересылке IRP с помощью IoCallDriver на другое устройство.

RemoveLockForwardDeviceControlInternal2

Правило RemoveLockForwardDeviceControlInternal2 проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются правильно при переадресации IRP с помощью IoCallDriver на другое устройство.

RemoveLockForwardRead

Правило RemoveLockForwardRead проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock.

RemoveLockForwardRead2

Правило RemoveLockForwardRead2 проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при переадресации IRP с помощью IoCallDriver на другое устройство.

RemoveLockForwardWrite

Правило RemoveLockForwardWrite проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при переадресации IRP с помощью IoCallDriver на другое устройство.

RemoveLockForwardWrite2

Правило RemoveLockForwardWrite2 проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при пересылке IRP с помощью IoCallDriver на другое устройство.

RemoveLockMnRemove

Правило RemoveLockMnRemove проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLockAndWait используются правильно при обработке IRP_MJ_PNP с помощью minorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockMnRemove2

Правило RemoveLockMnRemove2 проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLockAndWait используются правильно при обработке запроса IRP_MN_REMOVE_DEVICE перед перенаправлением IRP в более низкие драйверы.

RemoveLockMnSurpriseRemove

Правило RemoveLockMnSurpriseRemove проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLockAndWait используются правильно при обработке IRP_MJ_PNP с помощью minorFunction IRP_MN_SUPRISE_REMOVAL. Драйвер должен получить блокировку удаления перед пересылкой IRP вниз стека.

RemoveLockQueryMnRemove

Правило RemoveLockQueryMnRemove проверяет правильное использование вызовов IoAcquireRemoveLock и IoReleaseRemoveLock при обработке IRP_MJ_PNP с помощью дополнительных IRP_MN_QUERY_REMOVE_DEVICE. Драйвер должен получить блокировку удаления перед пересылкой IRP вниз стека.

RemoveLockRelease2

Правило RemoveLockRelease2 проверяет, используются ли вызовы IoAcquireRemoveLock и IoReleaseRemoveLock в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseCleanup

Правило RemoveLockReleaseCleanup указывает, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Каждый вызов IoAcquireRemoveLock должен иметь соответствующий вызов IoReleaseRemoveLock. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseClose

Правило RemoveLockReleaseClose проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseCreate

Правило RemoveLockReleaseCreate проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseDeviceControl

Правило RemoveLockReleaseDeviceControl проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseInternalDeviceControl

Правило RemoveLockReleaseInternalDeviceControl проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleasePnp

Правило RemoveLockReleasePnp проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleasePower

Правило RemoveLockReleasePower проверяет, используются ли вызовы IoAcquireRemoveLock и IoReleaseRemoveLock в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseRead

Правило RemoveLockReleaseRead проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseShutdown

Правило RemoveLockReleaseShutdown проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseSystemControl

Правило RemoveLockReleaseSystemControl проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

RemoveLockReleaseWrite

Правило RemoveLockReleaseWrite проверяет, что вызовы IoAcquireRemoveLock и IoReleaseRemoveLock используются в строгом изменении. Кроме того, в конце подпрограммы отправки драйвер не должен удерживать блокировку удаления.

Выбор набора правил IrpTracking

  1. Выберите проект драйвера (.vcxProj) в Microsoft Visual Studio. В меню "Драйвер" нажмите кнопку "Запустить средство проверки статического драйвера...".

  2. Перейдите на вкладку "Правила ". В разделе "Наборы правил" выберите IrpTracking.

    Чтобы выбрать набор правил по умолчанию в окне командной строки разработчика Visual Studio, укажите IrpTracking.sdv с параметром /проверка. Например:

    msbuild /t:sdv /p:Inputs="/check:IrpTracking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Дополнительные сведения см. в статье "Использование средства проверки статических драйверов для поиска дефектов в драйверах и командах средства проверки статических драйверов( MSBuild)".