Condividi tramite


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

BufAfterReqCompletedIoctl

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.

BufAfterReqCompletedIntIoctl

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.

BufAfterReqCompletedIntIoctlA

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.

BufAfterReqCompletedIoctlA

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.

BufAfterReqCompletedRead

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.

BufAfterReqCompletedReadA

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.

BufAfterReqCompletedWrite

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.

BufAfterReqCompletedWriteA

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.

ChildDeviceInitApi

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.

ControlDeviceDeleted

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.

ControlDeviceInitAPI

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.

CtlDeviceFinishInitDeviceAdd

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.

CtlDeviceFinishInitDrEntry

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.

DeviceCreateFail

La regola DeviceCreateFail specifica che EVT_WDF_DRIVER_DEVICE_ADD restituisce uno stato di errore quando la chiamata a WdfDeviceCreate ha esito negativo.

DeviceInitAllocate

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.

DeviceInitAPI

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.

DoubleDeviceInitFree

La regola DoubleDeviceInitFree specifica che i driver non devono liberare la struttura di inizializzazione del dispositivo due volte.

DriverCreate

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 .

InitFreeDeviceCallback

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.

InitFreeDeviceCreate

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.

InitFreeDeviceCreateType2

La regola InitFreeDeviceCreateType2 specifica che un driver non deve chiamare WdfDeviceCreate dopo aver chiamato WdfDeviceInitFree.

InitFreeDeviceCreateType4

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.

InitFreeNull

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 .

MdlAfterReqCompletedIntIoctl

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.

MdlAfterReqCompletedIntIoctlA

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.

MdlAfterReqCompletedIoctl

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.

MdlAfterReqCompletedIoctlA

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.

MdlAfterReqCompletedRead

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.

MdlAfterReqCompletedReadA

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.

MdlAfterReqCompletedWrite

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.

MdlAfterReqCompletedWriteA

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.

MemAfterReqCompletedIntIoctl

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.

MemAfterReqCompletedIntIoctlA

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.

MemAfterReqCompletedIoctl

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.

MemAfterReqCompletedIoctlA

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.

MemAfterReqCompletedRead

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.

MemAfterReqCompletedReadA

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.

MemAfterReqCompletedWrite

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.

MemAfterReqCompletedWriteA

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.

NullCheck

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:

  • È presente un'assegnazione di NULL che viene dereferenziata in un secondo momento.
  • È presente un parametro globale/parametro per una routine in un driver che può essere NULL che viene dereferenziato in un secondo momento ed è presente un controllo esplicito nel driver che suggerisce che il valore iniziale del puntatore può essere NULL.

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.

PdoDeviceInitAPI

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.

PdoInitFreeDeviceCallback

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.

PdoInitFreeDeviceCreate

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.

PdoInitFreeDeviceCreateType2

La regola PdoInitFreeDeviceCreateType2 specifica che un driver non deve chiamare WdfDeviceCreate dopo che chiama WdfDeviceInitFree.

PdoInitFreeDeviceCreateType4

La regola PdoInitFreeDeviceCreateType4 specifica che il driver deve chiamare WdfDeviceInitFree se si verifica un errore quando il driver chiama WdfDeviceCreate.

ControlDeviceInitAllocate

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.

InputBufferAPI

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

  1. Selezionare il progetto driver (con estensione vcxProj) in Microsoft Visual Studio. Dal menu Driver fare clic su Avvia verifica driver statico....

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