Set di regole IrpTracking (WDM)

Usare queste regole per verificare che il driver tenga traccia correttamente dei pacchetti di richieste di I/O (IRP) in modo che il dispositivo non venga rimosso mentre i runtime di integrazione sono in sospeso.

In questa sezione

Argomento Descrizione

IoReleaseRemoveLockAndWaitOutsideRemoveDevice

La regola IoReleaseRemoveLockAndWaitOutsideRemoveDevice specifica che IoReleaseRemoveLockAndWait non deve essere chiamato all'esterno di IRP_MJ_PNP con IRP_MN_REMOVE_DEVICE per un driver PnP.

NsRemoveLockMnRemove

La regola NsRemoveLockMnRemove verifica che un driver non restituisca STATUS_NOT_SUPPORTED durante l'elaborazione IRP_MJ_PNP con IRP_MN_REMOVE_DEVICE MinorFunction. Questa regola si applica solo ai driver FDO e FIDO.

NsRemoveLockMnSurpriseRemove

La regola NsRemoveLockMnSurpriseRemove verifica che un driver non restituisca STATUS_NOT_SUPPORTED durante l'elaborazione di una richiesta di IRP_MJ_PNP con minorFunction IRP_MN_SUPRI edizione Standard_REMOVAL. Questa regola si applica solo ai driver FDO e FIDO.

NsRemoveLockQueryMnRemove

La regola NsRemoveLockQueryMnRemove verifica che un driver non restituisca STATUS_NOT_SUPPORTED durante l'elaborazione IRP_MJ_PNP con IRP_MN_QUERY_REMOVE MinorFunction. Questa regola si applica solo ai driver FDO e FIDO.

RemoveLock

La regola RemoveLock specifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengono usate correttamente. Inoltre, alla fine della routine IRP_MJ_PNP o IRP_MJ_POWER, il driver non deve contenere RemoveLock.

RemoveLockCheck

La regola RemoveLockCheck verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLockAndWait vengano usate correttamente durante l'elaborazione di IRP_MJ_PNP con MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockForward

La regola RemoveLockForward verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente quando si inoltra un IRP a un altro dispositivo.

RemoveLockForward2

La regola RemoveLockForward2 verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente durante l'inoltro di IRP a un altro dispositivo.

RemoveLockForwardDeviceControl

La regola RemoveLockForwardDeviceControl verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente quando il driver usa IoCallDriver per inoltrare un IRP a un altro dispositivo.

RemoveLockForwardDeviceControl2

La regola RemoveLockForwardDeviceControl2 verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente quando il driver usa IoCallDriver per inoltrare un IRP a un altro dispositivo.

RemoveLockForwardDeviceControlInternal

La regola RemoveLockForwardDeviceControlInternal verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente quando si inoltra un IRP usando IoCallDriver a un altro dispositivo.

RemoveLockForwardDeviceControlInternal2

La regola RemoveLockForwardDeviceControlInternal2 verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente quando si inoltra un IRP usando IoCallDriver a un altro dispositivo.

RemoveLockForwardRead

La regola RemoveLockForwardRead verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente.

RemoveLockForwardRead2

La regola RemoveLockForwardRead2 verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente durante l'inoltro di un IRP tramite IoCallDriver a un altro dispositivo.

RemoveLockForwardWrite

La regola RemoveLockForwardWrite verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente durante l'inoltro di un IRP tramite IoCallDriver a un altro dispositivo.

RemoveLockForwardWrite2

La regola RemoveLockForwardWrite2 verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente durante l'inoltro di un IRP tramite IoCallDriver a un altro dispositivo.

RemoveLockMnRemove

La regola RemoveLockMnRemove verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLockAndWait vengano usate correttamente durante l'elaborazione di IRP_MJ_PNP con MinorFunction IRP_MN_REMOVE_DEVICE.

RemoveLockMnRemove2

La regola RemoveLockMnRemove2 verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLockAndWait vengano usate correttamente durante l'elaborazione IRP_MN_REMOVE_DEVICE richiesta prima dell'inoltro dell'IRP ai driver inferiori.

RemoveLockMnSurpriseRemove

La regola RemoveLockMnSurpriseRemove verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLockAndWait vengano usate correttamente durante l'elaborazione di IRP_MJ_PNP con IRP_MN_SUPRI edizione Standard_REMOVAL MinorFunction. Il driver deve acquisire il blocco di rimozione prima di inoltrare l'IRP nello stack.

RemoveLockQueryMnRemove

La regola RemoveLockQueryMnRemove verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate correttamente durante l'elaborazione di IRP_MJ_PNP con MinorFunction IRP_MN_QUERY_REMOVE_DEVICE. Il driver deve acquisire il blocco di rimozione prima di inoltrare l'IRP nello stack.

RemoveLockRelease2

La regola RemoveLockRelease2 verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in stretta alternanza. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseCleanup

La regola RemoveLockReleaseCleanup specifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengono usate in alternanza rigorosa. Ogni chiamata a IoAcquireRemoveLock deve avere una chiamata corrispondente a IoReleaseRemoveLock. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseClose

La regola RemoveLockReleaseClose verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in alternanza rigorosa. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseCreate

La regola RemoveLockReleaseCreate verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in stretta alternanza. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseDeviceControl

La regola RemoveLockReleaseDeviceControl verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in stretta alternanza. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseInternalDeviceControl

La regola RemoveLockReleaseInternalDeviceControl verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in alternanza rigorosa. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleasePnp

La regola RemoveLockReleasePnp verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in stretta alternanza. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleasePower

La regola RemoveLockReleasePower verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in alternanza rigorosa. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseRead

La regola RemoveLockReleaseRead verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in alternanza rigorosa. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseShutdown

La regola RemoveLockReleaseShutdown verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in alternanza rigorosa. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseSystemControl

La regola RemoveLockReleaseSystemControl verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in stretta alternanza. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

RemoveLockReleaseWrite

La regola RemoveLockReleaseWrite verifica che le chiamate a IoAcquireRemoveLock e IoReleaseRemoveLock vengano usate in stretta alternanza. Inoltre, alla fine della routine dispatch il driver non deve contenere il blocco di rimozione.

Per selezionare il set di regole IrpTracking

  1. Selezionare il progetto driver (con estensione vcxProj) in Microsoft Visual Studio. Dal menu Driver fare clic su Launch Static Driver Verifier...(Avvia verifica driver statico...).

  2. Fare clic sulla scheda Regole . In Set di regole selezionare IrpTracking.

    Per selezionare il set di regole predefinito da una finestra del prompt dei comandi per sviluppatori di Visual Studio, specificare IrpTracking.sdv con l'opzione /check . Ad esempio:

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

    Per altre informazioni, vedere Using Static Driver Verifier to Find Defects in Drivers and Static Driver Verifier commands (MSBuild).