Condividi tramite


Set di regole IrpProcessing (WDM)

Usare queste regole per verificare che il driver elabori correttamente i pacchetti di richiesta I/O (IRP).

Contenuto della sezione

Argomento Descrizione

CompleteRequest

La regola CompleteRequest verifica che la routine IoCompleteRequest non venga chiamata dopo l'esecuzione di una routine di completamento e che non restituisca STATUS_MORE_PROCESSING_REQUIRED.

CompleteRequestStatusCheck

La regola CompleteRequestStatusCheck verifica che il valore di stato di I/O in IRP corrisponda al valore di stato restituito dal driver inferiore.

CompletionRoutineRegistered

La regola CompletionRoutineRegistered specifica che se la routine dispatch registra una routine IoCompletion usando IoSetCompletionRoutineEx, la routine dispatch deve quindi chiamare IoCallDriver o PoCallDriver.

DoubleCompletion

La regola DoubleCompletion (WDM) specifica che il driver non deve chiamare la routine IoCompleteRequest due volte per lo stesso IRP.

IoReuseIrp

La regola IoReuseIrp specifica che un driver deve usare IoReuseIrp solo nei provider di integrazione allocati in precedenza con IoAllocateIrp.

IoReuseIrp2

La regola IoReuseIrp2 specifica che un driver deve usare IoReuseIrp solo nei provider di integrazione allocati in precedenza all'interno del driver.

IoSetCompletionExCompleteIrp

La regola IoSetCompletionExCompleteIrp specifica che la routine IoSetCompletionRoutineEx restituisce un valore NTSTATUS. Il driver deve controllare questo valore per determinare se la routine IoCompletion è stata registrata correttamente prima di chiamare IoCallDriver o PoCallDriver e se IoSetCompletionRoutineEx ha esito negativo, l'IRP deve essere completata e la routine dispatch deve restituire.

IoSetCompletionRoutineExCheck

La regola IoSetCompletionRoutineExCheck specifica che la routine IoSetCompletionRoutineEx restituisce un valore NTSTATUS. Il driver deve controllare questo valore per determinare se la routine IoCompletion è stata registrata correttamente prima di chiamare IoCallDriver o PoCallDriver.

IoSetCompletionRoutineExCheckDeviceObject

La regola IoSetCompletionRoutineExCheckDeviceObject specifica che se l'oggetto dispositivo corrente non viene passato a IoSetCompletionRoutineEx e l'oggetto dispositivo inferiore è, ciò può causare una race condition in cui l'oggetto dispositivo corrente potrebbe essere scaricato anche se la routine di completamento non è stata eseguita.

IoSetCompletionRoutineNonPnpDriver

La regola IoSetCompletionRoutineNonPnpDriver specifica che i driver che non sono driver PnP devono usare IoSetCompletionRoutineEx non IoSetCompletionRoutine.

IrpCancelField

La regola IrpCancelField specifica che il driver controlla il valore del membro Irp-Cancel> durante l'impostazione di una routine di annullamento su un IRP in cui è stata inserita la penna.

IrpProcessingComplete

La regola IrpProcessingComplete specifica che se una routine dispatch restituisce STATUS_SUCCESS, l'IRP deve essere stato completato dal driver stesso o da un driver di livello inferiore.

LowerDriverReturn

La regola LowerDriverReturn specifica che dopo aver usato PoCallDriver o IoCallDriver per chiamare un driver inferiore, il driver salva lo stato restituito dalla chiamata e passa lo stato restituito ricevuto alla routine dispatch.

SignalEventInCompletion

La regola SignalEventInCompletion specifica che durante l'elaborazione di un IRP asincrono, il driver deve chiamare KeSetEvent nella routine di completamento quando viene impostato il flag Irp-PendingReturned>.

SignalEventInCompletion2

La regola SignalEventInCompletion2 specifica che durante l'elaborazione di un IRP asincrono, il driver deve chiamare KeSetEvent nella routine di completamento quando viene impostato il flag Irp-PendingReturned>.

SignalEventInCompletion3

La regola SignalEventInCompletion3 specifica che durante l'elaborazione di un IRP asincrono, il driver deve chiamare KeSetEvent nella routine di completamento quando viene impostato il flag Irp-PendingReturned>.

StartIoCancel

La regola StartIoCancel specifica che il driver non deve chiamare IoSetStartIoAttributes con il parametro NonCancelable impostato su FALSE prima di chiamare IoSetCancelRoutine con una routine Cancel non NULL.

StartIoRecursion

La regola StartIoRecursion specifica che se la routine StartIo di un driver include una chiamata a IoStartNextPacket, il driver deve prima chiamare IoSetStartIoAttributes con l'attributo DeferredStartIo impostato su TRUE. In caso contrario, la ricorsione infinita può risultare.

PnpRemove

La regola PnpRemove specifica che il driver non può completare IRP_MN_SURPRISE_REMOVAL, IRP_MN_CANCEL_REMOVE_DEVICE, IRP_MN_CANCEL_STOP_DEVICE o IRP_MN_REMOVE_DEVICE richieste con un errore.

PnpSurpriseRemove

La regola PnpSurpriseRemove specifica che il driver non chiama IoDeleteDevice o IoDetachDevice durante l'elaborazione di una richiesta di IRP_MN_SURPRISE_REMOVAL .

PowerDownAllocate

La regola PowerDownAllocate specifica che un driver FDO e FIDO non deve allocare memoria durante l'elaborazione di una richiesta di IRP_MN_SET_POWER per una transizione SystemPowerState che passa da s0 a [S1... S5].

PowerDownFail

La regola PowerDownFail specifica che un driver FDO o FIDO non deve avere esito negativo a una richiesta di IRP_MN_SET_POWER quando il dispositivo viene spento. Questa regola si applica solo ai driver FDO e FIDO.

PowerIrpDIs

La regola PowerIrpDDIs specifica che quando un driver elabora un sistema o un dispositivo IRP_MJ_POWER con IRP_MN_SET_POWER, non deve chiamare DDI che può essere chiamato solo in PASSIVE_LEVEL.

PowerUpFail

La regola PowerUpFail specifica che un driver FDO o FIDO non deve avere esito negativo a una richiesta di IRP_MN_SET_POWER quando il dispositivo viene alimentato.

PnpIrpCompletion

La regola PnpIrpCompletion verifica che un driver FDO passi PnP IRP al driver inferiore.

WmiComplete

La regola WmiComplete specifica che durante l'elaborazione di un IRP secondario WMI, il driver chiama IoCompleteRequest prima di tornare dalla routine DispatchSystemControl .

WmiForward

La regola WmiForward specifica che il driver deve inoltrare irP secondari WMI quando è necessario l'inoltro.

Per selezionare il set di regole IrpProcessing

  1. Selezionare il progetto driver (con estensione vcxProj) in Microsoft Visual Studio. Dal menu Driver fare clic su Launch Static Driver Verifier....From the Driver menu, click Launch Static Driver Verifier....

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

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

    msbuild /t:sdv /p:Inputs="/check:IrpProcessing.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).