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 |
---|---|
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. |
|
La regola CompleteRequestStatusCheck verifica che il valore di stato di I/O in IRP corrisponda al valore di stato restituito dal driver inferiore. |
|
La regola CompletionRoutineRegistered specifica che se la routine dispatch registra una routine IoCompletion usando IoSetCompletionRoutineEx, la routine dispatch deve quindi chiamare IoCallDriver o PoCallDriver. |
|
La regola DoubleCompletion (WDM) specifica che il driver non deve chiamare la routine IoCompleteRequest due volte per lo stesso IRP. |
|
La regola IoReuseIrp specifica che un driver deve usare IoReuseIrp solo nei provider di integrazione allocati in precedenza con IoAllocateIrp. |
|
La regola IoReuseIrp2 specifica che un driver deve usare IoReuseIrp solo nei provider di integrazione allocati in precedenza all'interno del driver. |
|
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. |
|
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. |
|
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. |
|
La regola IoSetCompletionRoutineNonPnpDriver specifica che i driver che non sono driver PnP devono usare IoSetCompletionRoutineEx non IoSetCompletionRoutine. |
|
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. |
|
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. |
|
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. |
|
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>. |
|
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>. |
|
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>. |
|
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. |
|
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. |
|
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. |
|
La regola PnpSurpriseRemove specifica che il driver non chiama IoDeleteDevice o IoDetachDevice durante l'elaborazione di una richiesta di IRP_MN_SURPRISE_REMOVAL . |
|
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]. |
|
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. |
|
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. |
|
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. |
|
La regola PnpIrpCompletion verifica che un driver FDO passi PnP IRP al driver inferiore. |
|
La regola WmiComplete specifica che durante l'elaborazione di un IRP secondario WMI, il driver chiama IoCompleteRequest prima di tornare dalla routine DispatchSystemControl . |
|
La regola WmiForward specifica che il driver deve inoltrare irP secondari WMI quando è necessario l'inoltro. |
Per selezionare il set di regole IrpProcessing
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....
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).