Condividi tramite


Punti di ingresso duplicati per un tipo di ruolo funzione

Per la maggior parte dei tipi di ruolo della funzione, SDV presuppone che il driver abbia al massimo una funzione di callback per ogni punto di ingresso. Esistono tuttavia alcuni tipi di ruolo di funzione che possono avere più funzioni di callback degli eventi associate. Ad esempio, un driver KMDF potrebbe avere più funzioni di callback EvtTimerFunc o EvtDpcFunc (che usano le annotazioni del tipo di ruolo EVT_WDF_TIMER e EVT_WDF_DPC). In questo caso, SDV aggiunge un numero intero al tipo di funzione in Sdv-map.h. Ad esempio, se il driver ha due funzioni di callback DPC, SDV ne esegue il mapping a fun_WDF_DPC_1 e fun_WDF_DPC_2.

Se un driver supera il numero massimo di funzioni di callback per un tipo di ruolo, SDV visualizza il messaggio seguente.

Static Driver Verifier found more than one entry point for '[role type]'

Se un tipo di ruolo funzione ha più punti di ingresso rispetto a SDV supportati, non c'è necessariamente qualcosa di sbagliato con il driver. Tuttavia, per ottenere risultati di verifica accurati, è necessario modificare il file Sdv.-map.h per rimuovere le voci duplicate.

Ad esempio, il file Sdv-map.h seguente mostra che sono presenti due funzioni CompletionRoutine annotate usando il tipo di ruolo EVT_WDF_REQUEST_COMPLETION_ROUTINE. Nel file Sdv-map.h SDV definisce evtRequestReadCompletionRoutine e EvtRequestWriteCompletionRoutine come fun_WDF_REQUEST_COMPLETION_ROUTINE.

//Approved=false
#define fun_WDF_DRIVER_DEVICE_ADD OsrFxEvtDeviceAdd
#define fun_WDF_IO_QUEUE_IO_READ OsrFxEvtIoRead
#define fun_WDF_IO_QUEUE_IO_STOP OsrFxEvtIoStop
#define fun_WDF_DEVICE_D0_EXIT OsrFxEvtDeviceD0Exit
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine
#define fun_WDF_OBJECT_CONTEXT_CLEANUP OsrFxEvtDriverContextCleanup
#define fun_WDF_DEVICE_D0_ENTRY OsrFxEvtDeviceD0Entry
#define fun_WDF_DEVICE_PREPARE_HARDWARE OsrFxEvtDevicePrepareHardware
#define fun_WDF_IO_QUEUE_IO_WRITE OsrFxEvtIoWrite
#define fun_WDF_IO_QUEUE_IO_DEVICE_CONTROL OsrFxEvtIoDeviceControl

Per rimuovere la duplicazione, impostare come commento la seconda routine di completamento (sostituire il #d in #define con due delimitatori di commento (//). Impostare quindi Approved=true ed eseguire una verifica.

#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
//efine fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine

Dopo aver visualizzato i risultati della verifica con una routine di completamento, modificare di nuovo il file Sdv-map.h, ma questa volta impostare come commento la routine di completamento appena verificata e rimuovere il commento (sostituire // con #d) dalla routine di completamento non verificata. Quindi eseguire di nuovo SDV.

Tipi di ruolo funzione che supportano più punti di ingresso

Alcuni tipi di ruolo funzione supportano più voci. Quando il numero di voci supera il valore massimo supportato, SDV le segnala anche come voci duplicate. È possibile trattare queste voci aggiuntive allo stesso modo in cui si gestiscono le voci duplicate, impostando in modo selettivo le istruzioni #define per le routine di callback nel file Sdv-map.h ed eseguendo verifiche separate. Ad esempio, se il driver ha otto funzioni di callback DPC (che usano il tipo di ruolo EVT_WDF_DPC), è possibile eseguire le operazioni seguenti:

  • Modificare Sdv-map.h e impostare come commento le istruzioni define per fun_WDF_DPC_5 tramite fun_WDF_DPC_8.

  • Eseguire SDV nel driver.

  • Modificare quindi di nuovo Sdv-map.h per definire fun_WDF_DPC_5 tramite fun_WDF_DPC_8 e impostare come commento le istruzioni define per fun_WDF_DPC_1 tramite fun_WDF_DPC_4.

  • Eseguire SDV nel driver.

Per un elenco di tipi di ruolo funzione che possono avere più di una funzione di callback, vedere Static Driver Verifier Kmifier Annotations for a list of function role types that can have more than one callback function. L'elenco mostra il numero massimo di funzioni di callback supportate da SDV per tali tipi di ruolo.