Auf Englisch lesen

Freigeben über


Doppelte Einstiegspunkte für einen Funktionsrollentyp

Bei den meisten Funktionsrollentypen geht SDV davon aus, dass der Treiber höchstens über eine Rückruffunktion für jeden Einstiegspunkt verfügt. Es gibt jedoch einige Funktionsrollentypen, denen mehrere Ereignisrückruffunktionen zugeordnet sein können. Beispielsweise kann ein KMDF-Treiber über mehrere EvtTimerFunc - oder EvtDpcFunc-Rückruffunktionen verfügen (die die EVT_WDF_TIMER und EVT_WDF_DPC Rollentypanmerkungen verwenden). In diesem Fall fügt SDV eine ganze Zahl an den Funktionstyp in Sdv-map.h an. Wenn Ihr Treiber beispielsweise über zwei DPC-Rückruffunktionen verfügt, ordnet SDV diese fun_WDF_DPC_1 und fun_WDF_DPC_2 zu.

Wenn ein Treiber die maximale Anzahl von Rückruffunktionen für einen Rollentyp überschreitet, zeigt SDV die folgende Meldung an.

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

Wenn ein Funktionsrollentyp über mehr Einstiegspunkte verfügt, als SDV unterstützt, liegt nicht unbedingt ein Fehler mit dem Treiber vor. Um jedoch genaue Überprüfungsergebnisse zu erhalten, müssen Sie die Datei Sdv.-map.h bearbeiten, um die doppelten Einträge zu entfernen.

Die folgende Datei "Sdv-map.h" zeigt beispielsweise, dass es zwei CompletionRoutine-Funktionen gibt, die mit dem Rollentyp EVT_WDF_REQUEST_COMPLETION_ROUTINE kommentiert wurden. In der Datei Sdv-map.h definiert SDV sowohl EvtRequestReadCompletionRoutine als auch EvtRequestWriteCompletionRoutine als 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

Um die Duplizierung zu entfernen, kommentieren Sie die zweite Vervollständigungsroutine aus (ersetzen Sie die #d in #define durch zwei Kommentartrennzeichen (//). Legen Sie dann Approved=true fest, und führen Sie eine Überprüfung aus.

#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
//efine fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine

Nachdem Sie die Ergebnisse der Überprüfung mit der einzigen Vervollständigungsroutine angezeigt haben, bearbeiten Sie die Datei Sdv-map.h erneut, aber dieses Mal kommentieren Sie die soeben überprüfte Vervollständigungsroutine aus, und entfernen Sie den Kommentar (ersetzen Sie durch //#d) aus der nicht überprüften Vervollständigungsroutine. Führen Sie dann SDV erneut aus.

Funktionsrollentypen, die mehrere Einstiegspunkte unterstützen

Einige Funktionsrollentypen unterstützen mehrere Einträge. Wenn die Anzahl der Einträge den unterstützten Höchstwert überschreitet, meldet SDV diese auch als doppelte Einträge. Sie können diese zusätzlichen Einträge auf die gleiche Weise behandeln, wie Sie doppelte Einträge behandeln, indem Sie die #define-Anweisungen für die Rückrufroutinen in der Datei "Sdv-map.h" selektiv auskommentieren und separate Überprüfungen vornehmen. Wenn Ihr Treiber beispielsweise über acht DPC-Rückruffunktionen verfügt (die den Rollentyp EVT_WDF_DPC verwenden), können Sie die folgenden Aktionen ausführen:

  • Bearbeiten Sie Sdv-map.h, und kommentieren Sie die Define-Anweisungen für fun_WDF_DPC_5 bis fun_WDF_DPC_8 aus.

  • Führen Sie SDV auf dem Treiber aus.

  • Bearbeiten Sie dann sdv-map.h erneut, um fun_WDF_DPC_5 über fun_WDF_DPC_8 zu definieren und die define-Anweisungen für fun_WDF_DPC_1 bis fun_WDF_DPC_4 auszukommentieren.

  • Führen Sie SDV auf dem Treiber aus.

Eine Liste der Funktionsrollentypen, die mehrere Rückruffunktionen aufweisen können, finden Sie unter KmDF-Anmerkungen zur Statischen Treiberüberprüfung . Die Liste zeigt die maximale Anzahl von Rückruffunktionen, die SDV für diese Rollentypen unterstützt.