使用這些規則來確認您的驅動程式正確使用 KMDF DDI。
本節中
| 主題 | 說明 |
|---|---|
BufAfterReqCompletedIoctl 規則會指定在 EvtIoDeviceControl 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 |
|
BufAfterReqCompletedIntIoctl 規則會指定要求完成之後,無法存取其緩衝區 (僅限 EvtIoInternalDeviceControl 回呼函式) 。 要擷取緩衝區,可以呼叫 WdfRequestRetrieveOutputBuffer、WdfRequestRetrieveUnsafeUserOutputBuffer、WdfRequestRetrieveInputBuffer 或 WdfRequestRetrieveUnsafeUserInputBuffer。 |
|
BufAfterReqCompletedIntIoctlA 規則會確認在要求完成之後,不可存取該要求的緩衝區(僅限於 EvtIoInternalDeviceControl 回呼中)。 緩衝區是藉由呼叫 WdfRequestRetrieveInputBuffer 或 WdfRequestRetrieveOutputBuffer 或 WdfRequestRetrieveUnsafeUserInputBuffer 或 WdfRequestRetrieveUnsafeUserOutputBuffer 來擷取。 |
|
BufAfterReqCompletedIoctlA 規則會指定在 EvtIoDeviceControl 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 |
|
BufAfterReqCompletedRead 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 有 14 個 DDI 可作為可能的緩衝區存取方法。 |
|
BufAfterReqCompletedReadA 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 有 14 個 DDI 可作為可能的緩衝區存取方法。 |
|
BufAfterReqCompletedWrite 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 |
|
BufAfterReqCompletedWriteA 規則指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 |
|
ChildDeviceInitApi 規則會指定針對子裝置,驅動程式呼叫子裝置物件的 WdfDeviceCreate 方法之前,必須先呼叫架構裝置物件初始化方法。 |
|
ControDeviceDeleted 規則指定如果 PnP 驅動程式建立控制裝置物件,驅動程式必須先刪除其中一個清除回呼函式中的控制裝置物件,才能卸載驅動程式。 |
|
ControlDeviceInitAPI 規則指定,需要先呼叫 WdfControlDeviceInitAllocate 和所有用於初始化控制裝置的裝置物件初始化 DDI,以設定 WDFDEVICE_INIT 結構,才能為控制裝置呼叫 WdfDeviceCreate。 |
|
CtlDeviceFinishInitDeviceAdd 規則指定,如果驅動程式在 EvtDriverDeviceAdd 回呼函式中建立控制裝置物件,則必須在建立裝置之後,以及從 EvtDriverDeviceAdd 回呼函式結束之前呼叫 WdfControlFinishInitializing。 此規則不適用於非 PnP 驅動程式。 |
|
CtlDeviceFinishInitDrEntry 規則指定,如果驅動程式在 DriverEntry 回呼函式中建立控制裝置物件,則必須在建立裝置之後,以及從 EvtDriverDeviceAdd 回呼函式結束之前呼叫 WdfControlFinishInitializing。 此規則不適用於非 PnP 驅動程式。 |
|
DeviceCreateFail 規則會指定當呼叫 WdfDeviceCreate 失敗時,EVT_WDF_DRIVER_DEVICE_ADD會傳回錯誤狀態。 |
|
DeviceInitAllocate 規則會指定針對 PDO 裝置或控制裝置物件,必須先呼叫架構裝置物件初始化方法 WdfPdoInitAllocate 或 WdfControlDeviceInitAllocate ,驅動程式呼叫 WdfDeviceCreate。 |
|
針對 FDO 裝置,驅動程式呼叫裝置物件的 WdfDeviceCreate 方法之前,必須先呼叫架構裝置物件初始化方法和架構 FDO 初始化方法。 |
|
DoubleDeviceInitFree 規則指定驅動程式不應該釋放裝置初始化結構兩次。 |
|
DriverCreate 規則指定使用核心模式驅動程式架構 (KMDF) 的驅動程式必須呼叫 WdfDriverCreate 方法,才能從其 DriverEntry 常式內建立架構驅動程式物件。 |
|
InitFreeDeviceCallback 規則會指定驅動程式在初始化新的架構裝置物件時遇到錯誤,以及驅動程式從呼叫 WdfControlDeviceInitAllocate 收到WDFDEVICE_INIT結構時,驅動程式必須呼叫 WdfDeviceInitFree。 |
|
InitFreeDeviceCreate 規則指定驅動程式必須呼叫 WdfDeviceInitFree,而不是 WdfDeviceCreate,如果其中一個裝置物件初始化方法發生錯誤,而且驅動程式從呼叫 WdfControlDeviceInitAllocate 收到WDFDEVICE_INIT結構。 |
|
InitFreeDeviceCreateType2 規則會指定驅動程式在呼叫 WdfDeviceInitFree 之後不得呼叫 WdfDeviceCreate。 |
|
InitFreeDeviceCreateType4 規則指定驅動程式在呼叫 WdfDeviceCreate 時遇到錯誤,而且驅動程式從呼叫 WdfControlDeviceInitAllocate 收到WDFDEVICE_INIT結構時,驅動程式必須呼叫 WdfDeviceInitFree。 |
|
InitFreeNull 規則會指定接收PWDFDEVICE_INIT作為參數的 DDI 無法使用WDFDEVICE_INIT結構的 NULL 指標來呼叫。 |
|
MdlAfterReqCompletedIntIoctl 規則會指定在 EvtIoInternalDeviceControl 回呼函式內,無法在 I/O 要求完成之後存取記憶體描述元清單 (MDL) 。 |
|
MdlAfterReqCompletedIntIoctlA 規則會指定在 EvtIoInternalDeviceControl 回呼函式內,I/O 要求完成之後,無法存取記憶體描述元清單 (MDL) 。 |
|
MdlAfterReqCompletedIoctl 規則會指定在 EvtIoDeviceControl 回呼函式內,在 I/O 要求完成之後,無法存取記憶體描述元清單 (MDL) 。 |
|
MdlAfterReqCompletedIoctlA 規則會指定在 EvtIoDeviceControl 回呼函式內,在 I/O 要求完成之後,無法存取記憶體描述元清單 (MDL) 。 |
|
MdlAfterReqCompletedRead 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的記憶體描述元清單 (MDL) 物件。 |
|
MdlAfterReqCompletedReadA 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的記憶體描述元清單 (MDL) 物件。 |
|
MdlAfterReqCompletedWrite 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,無法存取擷取的記憶體描述元清單 (MDL) 物件。 |
|
MdlAfterReqCompletedWriteA 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,無法存取擷取的記憶體描述元清單 (MDL) 物件。 |
|
MemAfterReqCompletedIntIoctl 規則會指定在 EvtIoInternalDeviceControl 回呼函式內,在 I/O 要求完成之後,無法存取架構記憶體物件。 |
|
MemAfterReqCompletedIntIoctlA 規則會指定在 EvtIoInternalDeviceControl 回呼函式內,在 I/O 要求完成之後,無法存取架構記憶體物件。 |
|
MemAfterReqCompletedIoctl 規則會指定在 EvtIoDeviceControl 回呼函式內,在 I/O 要求完成之後,無法存取架構記憶體物件。 |
|
MemAfterReqCompletedIoctlA 規則會指定在 EvtIoDeviceControl 回呼函式內,I/O 要求完成之後,無法存取架構記憶體物件。 |
|
MemAfterReqCompletedRead 規則會指定在 EvtIoRead 回呼函式內,I/O 要求完成之後,無法存取架構記憶體物件。 |
|
MemAfterReqCompletedReadA 規則會指定在 EvtIoRead 回呼函式內,I/O 要求完成之後,無法存取架構記憶體物件。 |
|
MemAfterReqCompletedWrite 規則會指定在 EvtIoWrite 回呼函式內,I/O 要求完成之後,無法存取架構記憶體物件。 |
|
MemAfterReqCompletedWriteA 規則會指定在 EvtIoWrite 回呼函式內,I/O 要求完成之後,無法存取架構記憶體物件。 |
|
NullCheck 規則會驗證驅動程式程式碼中的 NULL 值稍後在驅動程式中不會被解引用。 如果下列任一條件為true,則此規則會報告缺陷:
如果 NullCheck 規則違規,最相關的程式碼陳述式會在追蹤樹狀結構窗格中醒目提示。 如需使用報表輸出的詳細資訊,請參閱 靜態驅動程式驗證器報表 和 瞭解追蹤檢視器。 |
|
PdoDeviceInitAPI 規則指定,在驅動程式呼叫實體裝置物件(PDO)的 WdfDeviceCreate 之前,必須先呼叫 WdfPdoInitAllocate 和所有其他為 PDO 設定 WDFDEVICE_INIT 結構的裝置物件初始化 DDI。 |
|
PdoInitFreeDeviceCallback 規則會指定驅動程式在呼叫任何架構裝置物件初始化函式時發生錯誤時,驅動程式必須呼叫 WdfDeviceInitFree。 |
|
PdoInitFreeDeviceCreate 規則指定驅動程式必須呼叫 WdfDeviceInitFree,而不是 WdfDeviceCreate,如果其中一個裝置物件初始化函式發生錯誤,而且驅動程式從呼叫 WdfPdoInitAllocate 收到WDFDEVICE_INIT結構。 |
|
PdoInitFreeDeviceCreateType2 規則會指定驅動程式在呼叫 WdfDeviceInitFree 之後,不得呼叫 WdfDeviceCreate。 |
|
PdoInitFreeDeviceCreateType4 規則會指定驅動程式在呼叫 WdfDeviceCreate 時發生錯誤時,驅動程式必須呼叫 WdfDeviceInitFree。 |
|
ControlDeviceInitAllocate 規則會指定針對控制裝置物件,驅動程式必須先呼叫架構裝置物件初始化方法 WdfControlDeviceInitAllocate ,再呼叫 WdfDeviceCreate。 |
|
InputBufferAPI 規則指定要在 EvtIoRead 回呼函式中使用正確的緩衝區檢索 DDI。 在 EvtIoRead 回呼函式內,無法呼叫下列 DDI 來擷取緩衝區: |
選取 DDI 使用規則集
在 Visual Studio Microsoft中選取您的驅動程式專案 (.vcxProj)。 從 驅動程式 選單中,點擊 啟動靜態驅動程式驗證程式…。
按一下 規則 索引標籤。在 [規則集] 底下,選取 [DDIUsage]。
若要從 Visual Studio 開發人員命令提示字元視窗選取預設規則集,請使用 /check 選項指定 DDIUsage.sdv。 例如:
msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32如需詳細資訊,請參閱 使用靜態驅動程式驗證器尋找驅動程式中的瑕疵 和 靜態驅動程式驗證器命令(MSBuild)。