Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
U většiny typů rolí funkcí SDV předpokládá, že ovladač má pro každý vstupní bod maximálně jednu funkci zpětného volání. Existují však některé typy rolí funkcí, které můžou mít přidružených více funkcí zpětného volání událostí. Například ovladač KMDF může mít více funkcí zpětného volání EvtTimerFunc nebo EvtDpcFunc (které používají poznámky k typu role EVT_WDF_TIMER a EVT_WDF_DPC). V tomto případě SDV připojí celé číslo k typu funkce v Sdv-map.h. Pokud má například ovladač dvě funkce zpětného volání DPC, SDV je mapuje na fun_WDF_DPC_1 a fun_WDF_DPC_2.
Pokud ovladač překročí maximální počet funkcí zpětného volání pro typ role, zobrazí funkce SDV následující zprávu.
Static Driver Verifier found more than one entry point for '[role type]'
Pokud typ role funkce obsahuje více vstupních bodů, než podporuje SDV, nemusí se s ovladačem nutně něco pokazit. Chcete-li však získat přesné výsledky ověření, musíte upravit soubor Sdv.-map.h, aby se duplicitní položky odebraly.
Například následující soubor Sdv-map.h ukazuje, že existují dvě funkce CompletionRoutine , které byly opatřeny poznámkami pomocí typu role EVT_WDF_REQUEST_COMPLETION_ROUTINE. V souboru Sdv-map.h definuje SDV EvtRequestReadCompletionRoutine i EvtRequestWriteCompletionRoutine jako 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
Pokud chcete duplikaci odebrat, zakomentujte druhou rutinu dokončení (nahraďte #d v #define dvěma oddělovači komentářů (//). Potom nastavte Approved=true a spusťte ověření.
#define fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestReadCompletionRoutine
//efine fun_WDF_REQUEST_COMPLETION_ROUTINE EvtRequestWriteCompletionRoutine
Po zobrazení výsledků ověření pomocí jedné rutiny dokončení upravte soubor Sdv-map.h znovu, ale tentokrát okomentujte rutinu dokončení, která byla právě ověřena, a odeberte komentář (nahraďte //#d) z rutiny dokončení, která nebyla ověřena. Pak znovu spusťte SDV.
Typy rolí funkcí, které podporují více vstupních bodů
Některé funkční role podporují více položek. Pokud počet položek překročí podporované maximum, SDV je také hlásí jako duplicitní položky. Tyto další záznamy můžete zpracovat stejným způsobem, jakým zpracováváte duplicitní záznamy, a to selektivním zakomentováním příkazů #define pro rutiny zpětného volání v souboru Sdv-map.h a provedením samostatných kontrol. Pokud má například ovladač osm funkcí zpětného volání DPC (které používají typ role EVT_WDF_DPC), můžete udělat toto:
Upravte Sdv-map.h a okomentujte příkazy define pro fun_WDF_DPC_5 prostřednictvím fun_WDF_DPC_8.
Na ovladači spusťte SDV.
Pak znovu upravte Sdv-map.h, abyste definovali fun_WDF_DPC_5 prostřednictvím fun_WDF_DPC_8 a okomentovali příkazy define pro fun_WDF_DPC_1 prostřednictvím fun_WDF_DPC_4.
Na ovladači spusťte SDV.
Seznam typů rolí funkcí, které můžou mít více než jednu funkci zpětného volání, najdete v poznámkách k funkci Ověření statického ovladače KMDF . V seznamu je uveden maximální počet funkcí zpětného volání, které SDV podporuje pro tyto typy rolí.