Condividi tramite


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

ChangeQueueState

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.

CompleteCanceledReq

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.

DoubleCompletion

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.

DoubleCompletionLocal

La regola DoubleCompletionLocal specifica che i driver non devono completare due volte una richiesta di I/O.

EvtIoStopCancel

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.

EvtIoStopCompleteOrStopAck

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.

EvtSurpriseRemoveNoSuspendQueue

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.

FileObjectConfigured

La regola FileObjectConfigured specifica che una chiamata al metodo WdfRequestGetFileObject è preceduta da una chiamata a WdfDeviceInitSetFileObjectConfig.

InternalIoctlReqs

La regola InternalIoctlReqs specifica che le richieste IOCTL interne non vengono passate alle interfacce DDI (Request-Send Device Driver Interface) di KMDF non appropriate.

InvalidReqAccess

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.

InvalidReqAccessLocal

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.

IoctlReqs

La regola IoctlReqs specifica che le richieste IOCTL non devono essere passate a richieste KMDF inappropriate o a interfacce DDI (Device Driver Interface).

MarkCancOnCancReqLocal

La regola MarkCancOnCancReqLocal specifica che il metodo WdfRequestMarkCancelable non può essere chiamato due volte consecutive nella stessa richiesta di I/O.

NoIoQueuePurgeSynchronously

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:

OutputBufferAPI

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:

ReadReqs

La regola ReadReqs specifica che le richieste di lettura non vengono passate ai metodi KMDF non appropriati.

ReqCompletionRoutine

La regola ReqCompletionRoutine specifica che è necessario impostare una routine di completamento prima dell'invio di una richiesta a una destinazione di I/O.

ReqDelete

La regola ReqDelete specifica che le richieste create dal driver non vengono passate alle funzioni WdfRequestCompleteXxx . Al termine, invece, la richiesta deve essere eliminata.

ReqIsCancOnCancReq

La regola ReqIsCancOnCancReq specifica che il metodo WdfRequestIsCanceled può essere chiamato solo su una richiesta non contrassegnata come annullabile.

ReqMarkCancelableSend

La regola ReqMarkCancelableSend specifica che le richieste inoltrate dal driver non sono contrassegnate come annullabili chiamando WdfRequestMarkCancelable.

RequestCompleted

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 .

RequestFormattedValid

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.

RequestGetStatusValid

Regola RequestGetStatusValid che specifica che WdfRequestGetStatus deve essere chiamata per una richiesta in una delle situazioni seguenti:

  • Quando WdfRequestSend restituisce un errore.
  • Quando la richiesta è stata inviata con WDF_REQUEST_SEND_OPTION_SYNCHRONOUS.

RequestSendAndForgetNoFormatting

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.

RequestSendAndForgetNoFormatting2

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.

StopAckWithinEvtIoStop

La regola StopAckWithinEvtIoStop specifica che la funzione WdfRequestStopAcknowledge viene chiamata solo dalla funzione di callback EvtIoStop .

WdfIoQueueFindRequestFailed

La regola WdfIoQueueFindRequestFailed specifica che WdfIoQueueRetrieveFoundRequest o WdfObjectDereference deve essere chiamato solo dopo che WdfIoQueueFindRequestFailed restituisce STATUS_SUCCESS.

WdfIoQueueRetrieveFoundRequest

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.

WdfIoQueueRetrieveNextRequest

La regola WdfIoQueueRetrieveNextRequest specifica che WdfIoQueueRetrieveNextRequest non viene chiamato dopo la chiamata a WdfIoQueueFindRequest .

WriteReqs

La regola WriteReqs specifica che una richiesta di scrittura non viene passata ai metodi KMDF non appropriati.

Per selezionare il set di regole RequestProcessing

  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 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).