Regola RequestCompleted (kmdf)
La regola RequestCompleted specifica che per un driver non 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 .
Una richiesta di I/O presentata alla coda predefinita del driver tramite una delle funzioni di callback della coda deve essere completata prima di uscire dalle funzioni di callback delle richieste di I/O, tranne nei casi seguenti:
La richiesta è stata posticipata ,ad esempio a un elemento di lavoro o DPC. In questo caso, è possibile usare la regola DeferredRequestCompleted .
La richiesta è stata inoltrata a una destinazione di I/O o a un'altra coda
La richiesta è stata recapitata al framework (chiamando WdfDeviceEnqueueRequest)
WdfRequestStopAcknowledge è stato chiamato
La regola viene verificata quando il driver esce dalle funzioni di callback seguenti:
EvtIoStop, EvtCleanupCallback o EvtDestroyCallback per la coda
EvtCleanupCallback o EvtDestroyCallback per l'oggetto file
EvtFileClose, EvtFileCleanup, EvtDeviceSelfManagedIoSuspend, EvtDeviceSelfManagedIoFlush, EvtDeviceSelfManagedIoCleanup, EvtDeviceShutdownNotification, EvtDeviceSurpriseRemoval, EvtCleanupCallback o EvtDestroyCallback per il dispositivo
Le funzioni di callback della coda di I/O per la presentazione delle richieste sono EvtIoDefault, EvtIoRead, EvtIoWrite, EvtIoDeviceControl e EvtIoInternalDeviceControl
Modello di driver: KMDF
Come eseguire il test
In fase di compilazione |
---|
Eseguire Static Driver Verifier e specificare la regola RequestCompleted . Usa i passaggi descritti di seguito per eseguire un'analisi del codice:
Per altre informazioni, vedere Using Static Driver Verifier to Find Defects in Drivers.For more information, see Using Static Driver Verifier to Find Defects in Drivers. |
Si applica a
WdfDeviceEnqueueRequestWdfDmaTransactionInitializeWdfDmaTransactionInitializeUsingRequestWdfIoTargetSendInternalIoctlOthersSynchronouslyWdfIoTargetSendInternalIoctlSynchronouslyWdfIoTargetSendIoctlSynchronouslyWdfIoTargetSendReadSynchronouslyWdfIoTargetSendWriteSynchronouslyWdfRequestCompleteWdfRequestCompleteWithInformationWdfRequestCompleteWithPriorityBoostWdfRequestForwardToIoQueueWdfRequestMarkCancelableWdfRequestMarkCancelableExWdfRequestSendWdfRequestStopAcknowledgeWdfWorkItemEnqueue