Set di regole di utilizzo DDI (KMDF)
Usare queste regole per verificare che il driver usi correttamente le DDI KMDF.
Contenuto della 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 dopo il completamento della richiesta di I/O. |
|
La regola BufAfterReqCompletedIntIoctl specifica che, dopo il completamento di una richiesta, non è possibile accedervi nel 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 è possibile 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 dopo il completamento 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 metodi di accesso al buffer possibili. |
|
La regola BufAfterReqCompletedReadA 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 metodi di accesso al buffer possibili. |
|
La regola BufAfterReqCompletedWrite specifica che all'interno della funzione di callback EvtIoWrite non è possibile accedere al buffer delle richieste di I/O recuperato dopo il completamento 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 dopo il completamento 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 che il driver venga scaricato. |
|
La regola ControlDeviceInitAPI specifica che WdfControlDeviceInitAllocate e tutti gli altri DDI di inizializzazione degli oggetti dispositivo che configurano una struttura di 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 di uscire 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 di uscire 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 degli oggetti del 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 la struttura di inizializzazione del dispositivo due volte. |
|
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 aver chiamato 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 di descrittori di memoria (MDL) dopo il completamento 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) dopo il completamento 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'elenco di descrittori di memoria (MDL) 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 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 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 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 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 del 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 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 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 WdfPdoInitAllocate e tutti gli altri DDI di inizializzazione degli oggetti dispositivo che configurano una struttura di WDFDEVICE_INIT per l'oggetto dispositivo fisico (PDO) devono essere chiamati 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 del dispositivo framework. |
|
La regola PdoInitFreeDeviceCreate specifica che un driver deve chiamare WdfDeviceInitFree anziché 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 del 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 (con estensione vcxProj) in Microsoft Visual Studio. Dal menu Driver fare clic su Avvia verifica driver statico....
Fare clic sulla scheda Regole . In Set di regole selezionare DDIUsage.
Per selezionare il set di regole predefinite da una finestra del prompt dei comandi per sviluppatori di Visual Studio, specificare DDIUsage.sdv con l'opzione /check . Ad esempio:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
Per altre informazioni, vedere Uso del verificatore driver statico per trovare i difetti nei comandi driver e verifica driver statici (MSBuild).