Set di regole RequestProcessing (KMDF)
Usare queste regole per verificare che il driver completi correttamente o annulla i pacchetti di richiesta di I/O .
Contenuto della sezione
Argomento | Descrizione |
---|---|
La regola ChangeQueueState specifica che il driver WDF non tenta di modificare lo stato della coda da thread simultanei o non chiama gli DDI di modifica dello stato uno dopo l'altro dall'interno dello stesso thread. Le funzioni di callback di modifica dello stato della coda sono WdfIoQueueStop, WdfIoQueueStopSynchronously,WdfIoQueuePurge,WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge e WdfIoQueueStopAndPurgeSynchronously. Se queste DDI vengono chiamate quando una modifica dello stato della coda è già in corso, causa l'arresto anomalo di un computer o la mancata risposta. |
|
La regola CompleteCanceledReq specifica che se la richiesta è già stata annullata, la richiesta non è più valida e il driver non deve completarlo. Mentre il driver annulla una richiesta contrassegnata in precedenza annullabile, deve verificare che la richiesta non sia già stata annullata. Se il driver non effettua questo controllo, il driver potrebbe completare una richiesta liberata. |
|
La regola DoubleCompletion specifica che i driver non devono completare due volte una richiesta di I/O. I metodi seguenti non devono essere chiamati due volte in una riga per la stessa richiesta: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost. |
|
La regola DoubleCompletionLocal specifica che i driver non devono completare due volte una richiesta di I/O. |
|
La regola EvtIoStopCancel specifica che all'interno della funzione di callback EvtIoStop il driver chiama uno dei metodi seguenti per le richieste di I/O che non sono annullabili. |
|
La regola EvtIoStopCompleteOrStopAck specifica che all'interno della funzione di callback EvtIoStop il driver chiama uno dei metodi seguenti per ogni richiesta di I/O presentata dal framework. Se questa operazione non viene eseguita, il driver potrebbe impedire al sistema di entrare in un altro stato di alimentazione inferiore. |
|
La regola EvtSurpriseRemoveNoSuspendQueue specifica che i driver WDF non devono svuotare, arrestare o eliminare la coda dalla funzione di callback EvtDeviceSurpriseRemoval . È invece necessario usare le funzioni di callback di I/O autogestito. La funzione di callback EvtDeviceSurpriseRemoval non è sincronizzata con il percorso di accensione. |
|
La regola FileObjectConfigured specifica che una chiamata al metodo WdfRequestGetFileObject è preceduta da una chiamata a WdfDeviceInitSetFileObjectConfig. |
|
La regola InternalIoctlReqs specifica che le richieste IOCTL interne non vengono passate alle interfacce DDI (Request-Send Device Driver Interface) di KMDF non appropriate. |
|
La regola InvalidReqAccess specifica che le richieste non sono accessibili dopo il completamento o l'annullamento. Questa regola potrebbe sovrapporsi ad altre regole, ad esempio regole che controllano il doppio completamento o regole che controllano le richieste sono state contrassegnate come annullabili due volte. |
|
La regola InvalidReqAccessLocal specifica che le richieste create in locale non sono accessibili dopo il completamento o l'annullamento. Questa regola potrebbe sovrapporsi ad altre regole, ad esempio regole che controllano il doppio completamento o regole che controllano le richieste sono state contrassegnate come annullabili due volte. |
|
La regola IoctlReqs specifica che le richieste IOCTL non devono essere passate a richieste KMDF inappropriate o a interfacce DDI (Device Driver Interface). |
|
La regola MarkCancOnCancReqLocal specifica che il metodo WdfRequestMarkCancelable non può essere chiamato due volte consecutive nella stessa richiesta di I/O. |
|
La regola NoIoQueuePurgeSynchronously verifica che i driver WDF non chiamino WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously o WdfIoQueuePurgeSynchronously dalle seguenti funzioni di callback degli eventi dell'oggetto coda EvtIO: |
|
La regola OutputBufferAPI specifica che le DDI corrette per il recupero del buffer vengono usate nella funzione di callback EvtIoWrite . All'interno della funzione di callback EvtIoWrite non è possibile chiamare le DDI seguenti per il recupero del buffer: |
|
La regola ReadReqs specifica che le richieste di lettura non vengono passate ai metodi KMDF non appropriati. |
|
La regola ReqCompletionRoutine specifica che è necessario impostare una routine di completamento prima dell'invio di una richiesta a una destinazione di I/O. |
|
La regola ReqDelete specifica che le richieste create dal driver non vengono passate alle funzioni WdfRequestCompleteXxx . Al termine, invece, la richiesta deve essere eliminata. |
|
La regola ReqIsCancOnCancReq specifica che il metodo WdfRequestIsCanceled può essere chiamato solo su una richiesta non contrassegnata come annullabile. |
|
La regola ReqMarkCancelableSend specifica che le richieste inoltrate dal driver non sono contrassegnate come annullabili chiamando WdfRequestMarkCancelable. |
|
La regola DeferredRequestCompleted specifica che per un driver non di filtro ogni richiesta presentata alla coda di I/O predefinita del driver deve essere completata, a meno che la richiesta non venga posticipata o inoltrata o se viene chiamato WdfRequestStopAcknowledge . |
|
La regola RequestFormattedValid specifica che il driver formatta tutte le richieste, ad eccezione di una richiesta di WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET, prima di inviarle a una destinazione di I/O. |
|
Regola RequestGetStatusValid che specifica che WdfRequestGetStatus deve essere chiamata per una richiesta in una delle situazioni seguenti:
|
|
La regola RequestSendAndForgetNoFormatting verifica che il driver non formatta una richiesta usando le funzioni di formattazione di destinazione I/O prima di inviarla a una destinazione di I/O con l'opzione di invio WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
La regola RequestSendAndForgetNoFormatting2 verifica che il driver non formatti una richiesta usando le funzioni di formattazione di destinazione I/O prima di inviarla a una destinazione di I/O con l'opzione di invio WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
La regola StopAckWithinEvtIoStop specifica che la funzione WdfRequestStopAcknowledge viene chiamata solo dalla funzione di callback EvtIoStop . |
|
La regola WdfIoQueueFindRequestFailed specifica che WdfIoQueueRetrieveFoundRequest o WdfObjectDereference deve essere chiamato solo dopo che WdfIoQueueFindRequestFailed restituisce STATUS_SUCCESS. |
|
La regola WdfIoQueueRetrieveFoundRequest specifica che il metodo WdfIoQueueRetrieveFoundRequest viene chiamato solo dopo che WdfIoQueueFindRequest viene chiamato e restituito STATUS_SUCCESS e non viene chiamato WdfObjectDereference sulla stessa richiesta. |
|
La regola WdfIoQueueRetrieveNextRequest specifica che WdfIoQueueRetrieveNextRequest non viene chiamato dopo la chiamata a WdfIoQueueFindRequest . |
|
La regola WriteReqs specifica che una richiesta di scrittura non viene passata ai metodi KMDF non appropriati. |
Per selezionare il set di regole RequestProcessing
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 RequestProcessing.
Per selezionare il set di regole predefinito da una finestra del prompt dei comandi per gli sviluppatori di Visual Studio, specificare RequestProcessing.sdv con l'opzione /check . Ad esempio:
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.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).