Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare queste regole per verificare che il driver usi correttamente le DDI KMDF.
In questa sezione
| Argomento | Descrizione |
|---|---|
La regola BufAfterReqCompletedIoctl specifica che all'interno della funzione di callback EvtIoDeviceControl non è possibile accedere al buffer delle richieste di I/O recuperato al termine della richiesta di I/O. |
|
La regola BufAfterReqCompletedIntIoctl specifica che dopo il completamento di una richiesta non è possibile accedere al buffer (solo all'interno della funzione di callback EvtIoInternalDeviceControl ). Il buffer viene recuperato chiamando WdfRequestRetrieveOutputBuffer o WdfRequestRetrieveUnsafeUserOutputBuffer o WdfRequestRetrieveInputBuffer o WdfRequestRetrieveUnsafeUserInputBuffer. |
|
La regola BufAfterReqCompletedIntIoctlA verifica che, dopo il completamento di una richiesta, non si può accedere al buffer (solo all'interno di EvtIoInternalDeviceControl). Il buffer è stato recuperato chiamando WdfRequestRetrieveInputBuffer o WdfRequestRetrieveOutputBuffer o WdfRequestRetrieveUnsafeUserInputBuffer o WdfRequestRetrieveUnsafeUserOutputBuffer. |
|
La regola BufAfterReqCompletedIoctlA specifica che all'interno della funzione di callback EvtIoDeviceControl non è possibile accedere al buffer delle richieste di I/O recuperato al termine della richiesta di I/O. |
|
La regola BufAfterReqCompletedRead specifica che all'interno della funzione di callback EvtIoRead non è possibile accedere al buffer delle richieste di I/O recuperato dopo il completamento della richiesta di I/O. Esistono 14 DDI che fungono da possibili metodi di accesso al buffer. |
|
La regola BufAfterReqCompletedReadA specifica che all'interno della funzione di callback EvtIoRead non è possibile accedere al buffer delle richieste di I/O recuperato al termine della richiesta di I/O. Esistono 14 DDI che fungono da possibili metodi di accesso al buffer. |
|
La regola BufAfterReqCompletedWrite specifica che all'interno della funzione di callback EvtIoWrite non è possibile accedere al buffer delle richieste di I/O recuperato al termine della richiesta di I/O. |
|
La regola BufAfterReqCompletedWriteA specifica che all'interno della funzione di callback EvtIoWrite non è possibile accedere al buffer delle richieste di I/O recuperato al termine della richiesta di I/O. |
|
La regola ChildDeviceInitApi specifica che per un dispositivo figlio è necessario chiamare i metodi di inizializzazione dell'oggetto dispositivo framework prima che il driver chiami il metodo WdfDeviceCreate per l'oggetto dispositivo figlio. |
|
La regola ControDeviceDeleted specifica che se un driver PnP crea un oggetto dispositivo di controllo, il driver deve eliminare l'oggetto dispositivo di controllo in una delle funzioni di callback di pulizia prima dello scaricamento del driver. |
|
La regola ControlDeviceInitAPI specifica che WdfControlDeviceInitAllocate e tutti gli altri DDI di inizializzazione degli oggetti dispositivo che configurano una struttura WDFDEVICE_INIT per il dispositivo di controllo devono essere chiamati prima di WdfDeviceCreate per il dispositivo di controllo. |
|
La regola CtlDeviceFinishInitDeviceAdd specifica che se un driver crea un oggetto dispositivo di controllo in una funzione di callback EvtDriverDeviceAdd , deve chiamare WdfControlFinishInitializing dopo la creazione del dispositivo e prima che esca dalla funzione di callback EvtDriverDeviceAdd . Questa regola non si applica ai driver non PnP. |
|
La regola CtlDeviceFinishInitDrEntry specifica che se un driver crea un oggetto dispositivo di controllo in una funzione di callback DriverEntry , deve chiamare WdfControlFinishInitializing dopo la creazione del dispositivo e prima che esca dalla funzione di callback EvtDriverDeviceAdd . Questa regola non si applica ai driver non PnP. |
|
La regola DeviceCreateFail specifica che EVT_WDF_DRIVER_DEVICE_ADD restituisce uno stato di errore quando la chiamata a WdfDeviceCreate ha esito negativo. |
|
La regola DeviceInitAllocate specifica che, per un dispositivo PDO o un oggetto dispositivo di controllo, i metodi di inizializzazione dell'oggetto dispositivo framework WdfPdoInitAllocate o WdfControlDeviceInitAllocate devono essere chiamati prima che il driver chiami WdfDeviceCreate. |
|
Per un dispositivo FDO, è necessario chiamare i metodi di inizializzazione dell'oggetto dispositivo framework e i metodi di inizializzazione FDO del framework prima che il driver chiami il metodo WdfDeviceCreate per l'oggetto dispositivo. |
|
La regola DoubleDeviceInitFree specifica che i driver non devono liberare due volte la struttura di inizializzazione del dispositivo. |
|
La regola DriverCreate specifica che un driver che usa Kernel Mode Driver Framework (KMDF) deve chiamare il metodo WdfDriverCreate per creare un oggetto driver framework dall'interno della routine DriverEntry . |
|
La regola InitFreeDeviceCallback specifica che un driver deve chiamare WdfDeviceInitFree se il driver rileva un errore durante l'inizializzazione di un nuovo oggetto dispositivo framework e se il driver ha ricevuto la struttura WDFDEVICE_INIT da una chiamata a WdfControlDeviceInitAllocate. |
|
La regola InitFreeDeviceCreate specifica che un driver deve chiamare WdfDeviceInitFree anziché WdfDeviceCreate se si verifica un errore in uno dei metodi di inizializzazione degli oggetti del dispositivo e se il driver ha ricevuto la struttura WDFDEVICE_INIT da una chiamata a WdfControlDeviceInitAllocate. |
|
La regola InitFreeDeviceCreateType2 specifica che un driver non deve chiamare WdfDeviceCreate dopo che chiama WdfDeviceInitFree. |
|
La regola InitFreeDeviceCreateType4 specifica che un driver deve chiamare WdfDeviceInitFree se il driver rileva un errore mentre chiama WdfDeviceCreate e se il driver ha ricevuto la struttura WDFDEVICE_INIT da una chiamata a WdfControlDeviceInitAllocate. |
|
La regola InitFreeNull specifica che le DDI che ricevono PWDFDEVICE_INIT come parametro non possono essere chiamate tramite un puntatore NULL a una struttura WDFDEVICE_INIT . |
|
La regola MdlAfterReqCompletedIntIoctl specifica che all'interno della funzione di callback EvtIoInternalDeviceControl non è possibile accedere all'elenco dei descrittori di memoria (MDL) al termine della richiesta di I/O. |
|
La regola MdlAfterReqCompletedIntIoctlA specifica che all'interno della funzione di callback EvtIoInternalDeviceControl non è possibile accedere all'elenco dei descrittori di memoria (MDL) al termine della richiesta di I/O. |
|
La regola MdlAfterReqCompletedIoctl specifica che all'interno della funzione di callback EvtIoDeviceControl non è possibile accedere all'elenco dei descrittori di memoria (MDL) al termine della richiesta di I/O. |
|
La regola MdlAfterReqCompletedIoctlA specifica che all'interno della funzione di callback EvtIoDeviceControl non è possibile accedere all'elenco dei descrittori di memoria (MDL) al termine della richiesta di I/O. |
|
La regola MdlAfterReqCompletedRead specifica che all'interno della funzione di callback EvtIoRead non è possibile accedere all'oggetto MDL (Memory Descriptor List) recuperato dopo il completamento della richiesta di I/O. |
|
La regola MdlAfterReqCompletedReadA specifica che all'interno della funzione di callback EvtIoRead non è possibile accedere all'oggetto MDL (Memory Descriptor List) recuperato dopo il completamento della richiesta di I/O. |
|
La regola MdlAfterReqCompletedWrite specifica che all'interno della funzione di callback EvtIoWrite non è possibile accedere all'oggetto MDL (Memory Descriptor List) recuperato dopo il completamento della richiesta di I/O. |
|
La regola MdlAfterReqCompletedWriteA specifica che all'interno della funzione di callback EvtIoWrite non è possibile accedere all'oggetto MDL (Memory Descriptor List) recuperato dopo il completamento della richiesta di I/O. |
|
La regola MemAfterReqCompletedIntIoctl specifica che all'interno della funzione di callback EvtIoInternalDeviceControl non è possibile accedere all'oggetto memoria del framework dopo il completamento della richiesta di I/O. |
|
La regola MemAfterReqCompletedIntIoctlA specifica che all'interno della funzione di callback EvtIoInternalDeviceControl non è possibile accedere all'oggetto memoria del framework dopo il completamento della richiesta di I/O. |
|
La regola MemAfterReqCompletedIoctl specifica che all'interno della funzione di callback EvtIoDeviceControl non è possibile accedere all'oggetto memoria framework dopo il completamento della richiesta di I/O. |
|
La regola MemAfterReqCompletedIoctlA specifica che all'interno della funzione di callback EvtIoDeviceControl non è possibile accedere all'oggetto memoria del framework dopo il completamento della richiesta di I/O. |
|
La regola MemAfterReqCompletedRead specifica che all'interno della funzione di callback EvtIoRead non è possibile accedere all'oggetto memoria del framework dopo il completamento della richiesta di I/O. |
|
La regola MemAfterReqCompletedReadA specifica che all'interno della funzione di callback EvtIoRead non è possibile accedere all'oggetto memoria framework dopo il completamento della richiesta di I/O. |
|
La regola MemAfterReqCompletedWrite specifica che all'interno della funzione di callback EvtIoWrite non è possibile accedere all'oggetto memoria del framework dopo il completamento della richiesta di I/O. |
|
La regola MemAfterReqCompletedWriteA specifica che all'interno della funzione di callback EvtIoWrite non è possibile accedere all'oggetto memoria del framework dopo il completamento della richiesta di I/O. |
|
La regola NullCheck verifica che un valore NULL all'interno del codice driver non venga dereferenziato più avanti nel driver. Questa regola segnala un difetto se una di queste condizioni è vera:
Con le violazioni delle regole NullCheck, le istruzioni di codice più rilevanti vengono evidenziate nel riquadro dell'albero di traccia. Per altre informazioni sull'utilizzo dell'output del report, vedere Static Driver Verifier Report e Understanding the Trace Viewer. |
|
La regola PdoDeviceInitAPI specifica che È necessario chiamare WdfPdoInitAllocate e tutti gli altri DDI dell'inizializzazione di oggetti dispositivo che configurano una struttura WDFDEVICE_INIT per l'oggetto dispositivo fisico (PDO) prima che il driver chiami WdfDeviceCreate per il PDO. |
|
La regola PdoInitFreeDeviceCallback specifica che il driver deve chiamare WdfDeviceInitFree se si verifica un errore quando il driver chiama qualsiasi funzione di inizializzazione dell'oggetto dispositivo framework. |
|
La regola PdoInitFreeDeviceCreate specifica che un driver deve chiamare WdfDeviceInitFree invece di WdfDeviceCreate se si verifica un errore in una delle funzioni di inizializzazione dell'oggetto dispositivo e se il driver ha ricevuto la struttura WDFDEVICE_INIT da una chiamata a WdfPdoInitAllocate. |
|
La regola PdoInitFreeDeviceCreateType2 specifica che un driver non deve chiamare WdfDeviceCreate dopo che chiama WdfDeviceInitFree. |
|
La regola PdoInitFreeDeviceCreateType4 specifica che il driver deve chiamare WdfDeviceInitFree se si verifica un errore quando il driver chiama WdfDeviceCreate. |
|
La regola ControlDeviceInitAllocate specifica che per un oggetto dispositivo di controllo, il driver deve chiamare il metodo di inizializzazione dell'oggetto dispositivo framework WdfControlDeviceInitAllocate prima che il driver chiami WdfDeviceCreate. |
|
La regola InputBufferAPI specifica che le DDI corrette per il recupero del buffer vengono usate nella funzione di callback EvtIoRead. All'interno della funzione di callback EvtIoRead non è possibile chiamare le DDI seguenti per il recupero del buffer: |
Per selezionare il set di regole di utilizzo DDI
Selezionare il progetto driver (.vcxProj) in Microsoft Visual Studio. Dal menu Driver fare clic su Launch Static Driver Verifier...(Avvia verifica driver statico...).
Fare clic sulla scheda Regole . In Set di regole selezionare DDIUsage.
Per selezionare il set di regole predefinito da una finestra del prompt dei comandi per sviluppatori di Visual Studio, specificare DDIUsage.sdv con l'opzione /check . Per esempio:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32Per altre informazioni, vedere Uso di Static Driver Verifier per individuare difetti nei driver e Comandi di Static Driver Verifier (MSBuild).