Delen via


Dubbele toegangspunten voor een functieroltype

Voor de meeste functieroltypen gaat SDV ervan uit dat het stuurprogramma maximaal één callback-functie voor elk toegangspunt heeft. Er zijn echter enkele functieroltypen waaraan meerdere callback-functies voor gebeurtenissen kunnen zijn gekoppeld. Een KMDF-stuurprogramma kan bijvoorbeeld meerdere EvtTimerFunc - of EvtDpcFunc-callbackfuncties hebben (die gebruikmaken van de EVT_WDF_TIMER en EVT_WDF_DPC roltypeaantekeningen). In dit geval voegt SDV een geheel getal toe aan het functietype in Sdv-map.h. Als uw stuurprogramma bijvoorbeeld twee DPC-callbackfuncties heeft, wijst SDV deze toe aan fun_WDF_DPC_1 en fun_WDF_DPC_2.

Als een stuurprogramma het maximum aantal callback-functies voor een roltype overschrijdt, geeft SDV het volgende bericht weer.

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

Als een functieroltype meer toegangspunten heeft dan SDV ondersteunt, is er niet noodzakelijkerwijs iets mis met het stuurprogramma. Als u echter nauwkeurige verificatieresultaten wilt verkrijgen, moet u het bestand Sdv.-map.h bewerken om de dubbele vermeldingen te verwijderen.

In het volgende bestand Sdv-map.h ziet u bijvoorbeeld dat er twee CompletionRoutine-functies zijn die zijn geannoteerd met behulp van het EVT_WDF_REQUEST_COMPLETION_ROUTINE roltype. In het bestand Sdv-map.h definieert SDV zowel EvtRequestReadCompletionRoutine als 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

Als u de duplicatie wilt verwijderen, markeert u de tweede voltooiingsroutine (vervang de #d in #define door twee scheidingstekens voor opmerkingen (//). Stel vervolgens Approved=true in en voer een verificatie uit.

#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
//efine fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine

Nadat u de resultaten van de verificatie hebt bekeken met de ene voltooiingsroutine, bewerkt u het bestand Sdv-map.h opnieuw, maar deze keer markeert u de voltooiingsroutine die zojuist is geverifieerd en verwijdert u de opmerking (vervang de // door #d) uit de voltooiingsroutine die niet is geverifieerd. Voer vervolgens SDV opnieuw uit.

Functieroltypen die ondersteuning bieden voor meerdere toegangspunten

Sommige functieroltypen ondersteunen meerdere vermeldingen. Wanneer het aantal vermeldingen het ondersteunde maximum overschrijdt, rapporteert SDV deze ook als dubbele vermeldingen. U kunt deze extra vermeldingen op dezelfde manier behandelen als voor het verwerken van dubbele vermeldingen, door selectief commentaar te maken van de #define-instructies voor de callback-routines in het bestand Sdv-map.h en afzonderlijke verificaties te maken. Als uw stuurprogramma bijvoorbeeld acht DPC-callbackfuncties heeft (die gebruikmaken van het EVT_WDF_DPC roltype), kunt u het volgende doen:

  • Bewerk Sdv-map.h en markeer de gedefinieerde instructies voor fun_WDF_DPC_5 via fun_WDF_DPC_8.

  • Voer SDV uit op het stuurprogramma.

  • Bewerk vervolgens Sdv-map.h opnieuw om fun_WDF_DPC_5 te definiëren via fun_WDF_DPC_8 en markeer de gedefinieerde instructies voor fun_WDF_DPC_1 via fun_WDF_DPC_4.

  • Voer SDV uit op het stuurprogramma.

Zie KMDF-aantekeningen voor statische stuurprogrammaverificeringen voor een lijst met functieroltypen die meer dan één callback-functie kunnen hebben. De lijst bevat het maximum aantal callback-functies dat SDV ondersteunt voor deze roltypen.