掃描驅動程式
使用 /scan 命令選項掃描驅動程式是選擇性的。 如果您在驗證驅動程式之前未掃描,SDV 會掃描函式角色類型宣告,並在驗證驅動程式時建立 Sdv-map.h 檔案。
在此掃描期間,SDV 會嘗試偵測它需要驗證驅動程式的驅動程式進入點。 它會在 Sdv-map.h 中記錄掃描的結果,這是它在驅動程式來原始目錄中建立的檔案。
不過,請務必在掃描步驟或驗證之後檢閱此檔案,以確保 SDV 偵測到正確的進入點。 如果進入點遺失或錯誤,驗證可能不可靠。 更重要的是,如果 SDV 無法偵測到任何進入點,就無法驗證驅動程式。
您只需要掃描每個驅動程式一次。 之後,SDV 會保留驅動程式的 Sdv-map.h 檔案以供日後驗證。
檢查 Sdv-map.h 檔案
執行掃描命令或驗證驅動程式之後,請開啟 Sdv-map.h 檔案並檢查檔案。 Sdv-map.h 是格式化的文字檔。 您可以讀取任何文字編輯器,例如 [記事本]。
比較 Sdv-map.h 檔案的內容與驅動程式的宣告函式角色類型。 檢查 Sdv-map.h 檔案的內容,以查看驅動程式的回呼或分派常式是否已正確識別。
不需要 Sdv-map.h 檔案,即可列出驅動程式中的所有進入點;只有分析中使用的 IRP 主要函式程式碼或函式角色類型的進入點。 請勿將任何 IRP 主要函式程式碼或函式角色類型新增至檔案。
如需 Sdv-map.h 檔案的詳細資訊,請參閱 Sdv-map.h。 格式描述為 Sdv-map.h 檔案的格式。 在 核准 Sdv-map.h 檔案中,會描述可出現在 Sdv-map.h 檔案中的錯誤。
下列範例顯示Fail_driver1 Sdv-map.h 檔案的內容,這是 tools\sdv\samples\fail_drivers\wdm 目錄中的範例 WDM 驅動程式。
//Approved=false
//DriverAddDevice
#define fun_AddDevice DriverAddDevice
//DriverEntry
#define fun_DriverEntry DriverEntry
//DriverUnload
#define fun_DriverUnload DriverUnload
//CompletionRoutine
#define fun_IO_COMPLETION_ROUTINE_1 CompletionRoutine
//DpcForIsrRoutine
#define fun_IO_DPC_ROUTINE_1 DpcForIsrRoutine
//DispatchCreate
#define fun_IRP_MJ_CREATE DispatchCreate
//DispatchPnp
#define fun_IRP_MJ_PNP DispatchPnp
//DispatchPower
#define fun_IRP_MJ_POWER DispatchPower
//DispatchRead
#define fun_IRP_MJ_READ DispatchRead
//DispatchSystemControl
#define fun_IRP_MJ_SYSTEM_CONTROL DispatchSystemControl
//InterruptServiceRoutine
#define fun_KSERVICE_ROUTINE_1 InterruptServiceRoutine
更正 Sdv-map.h 檔案
驗證驅動程式之前,請先更正 Sdv-map.h 檔案中的任何錯誤。 SDV 會驗證驅動程式,即使 Sdv-map.h 檔案不正確或未核准,但驗證的結果可能不可靠。 例如,如果您未使用對應的函式角色類型來宣告驅動程式的分派或回呼常式,驅動程式常式就不會出現在 Sdv-map.h 檔案中。 因此,您可能會錯過在程式碼中尋找瑕疵,因為 SDV 會將使用函式角色類型的規則視為不適用,即使您將這些規則指定為驗證的一部分也一樣。
若要更正 Sdv-map.h 檔案,請務必使用適當的函式角色類型來宣告驅動程式的分派或回呼常式。 然後重新掃描驅動程式,並確認它們出現在 Sdv-map.h 檔案中。
核准 Sdv-map.h 檔案
判斷 Sdv-map.h 檔案正確之後,您可以核准檔案。 如果您未對檔案進行任何變更,就不需要核准它。
即使未核准 Sdv-map.h 檔案,SDV 也會驗證驅動程式。
若要核准 Sdv-map.h 檔案,請在檔案的第一行變更:
//Approved=false
變更為:
//Approved=true
您只需要針對每個驅動程式核准 Sdv-map.h 檔案一次。 之後,SDV 會針對驅動程式保留已核准的 Sdv-map.h 檔案,以供日後驗證。 如果您想要再次掃描原始程式碼中的函式角色類型宣告,只要刪除檔案即可。
下列範例顯示 KMDF 範例驅動程式的已核准 Sdv-map.h 檔案,Fail_Driver1。 SDV 會使用 Sdv-map.h 檔案,將驅動程式的宣告回呼函式與驗證所需的函式角色類型 SDV 對應。
//Approved=true
//DriverEntry
#define fun_DriverEntry DriverEntry
//EvtDriverDeviceAdd
#define fun_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd
//EvtIoDeviceControl
#define fun_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl
//EvtIoInternalDeviceControl
#define fun_WDF_IO_QUEUE_IO_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl
//EvtIoRead
#define fun_WDF_IO_QUEUE_IO_READ EvtIoRead
//EvtRequestCancel
#define fun_WDF_REQUEST_CANCEL_1 EvtRequestCancel