共用方式為


DDI 使用量規則集 (KMDF)

使用這些規則來確認您的驅動程序正確使用 KMDF DDI。

本節內容

主題 描述

BufAfterReqCompletedIoctl

BufAfterReqCompletedIoctl 規則指定在 EvtIoDeviceControl 回呼函式內,I/O 要求緩衝區在 I/O 要求完成之後便無法存取。

BufAfterReqCompletedIntIoctl

BufAfterReqCompletedIntIoctl 規則會指定在要求完成之後,只能在 EvtIoInternalDeviceControl 回呼函式記憶體取其緩衝區) (。 呼叫 WdfRequestRetrieveOutputBufferWdfRequestRetrieveUnsafeUserOutputBufferWdfRequestRetrieveInputBufferWdfRequestRetrieveUnsafeUserInputBuffer 來擷取緩衝區。

BufAfterReqCompletedIntIoctlA

BufAfterReqCompletedIntIoctlA 規則會驗證要求完成後,其緩衝區無法存取 (EvtIoInternalDeviceControl 回呼) 。 呼叫 WdfRequestRetrieveInputBufferWdfRequestRetrieveOutputBufferWdfRequestRetrieveUnsafeUserInputBufferWdfRequestRetrieveUnsafeUserOutputBuffer 來擷取緩衝區。

BufAfterReqCompletedIoctlA

BufAfterReqCompletedIoctlA 規則指定在 EvtIoDeviceControl 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。

BufAfterReqCompletedRead

BufAfterReqCompletedRead 規則指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 有14個 DIS 可作為可能的緩衝區存取方法。

BufAfterReqCompletedReadA

BufAfterReqCompletedReadA 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 有14個 DIS 可作為可能的緩衝區存取方法。

BufAfterReqCompletedWrite

BufAfterReqCompletedWrite 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。

BufAfterReqCompletedWriteA

BufAfterReqCompletedWriteA 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。

ChildDeviceInitApi

ChildDeviceInitApi 規則會指定針對子裝置,必須先呼叫架構裝置物件初始化方法,驅動程式才能呼叫子裝置物件的 WdfDeviceCreate 方法。

ControlDeviceDeleted

ControDeviceDeleted 規則會指定,如果 PnP 驅動程式建立控制裝置對象,驅動程式必須在驅動程式卸除之前,先刪除其中一個清除回呼函式中的控制裝置物件。

ControlDeviceInitAPI

ControlDeviceInitAPI 規則指定 WdfControlDeviceInitAllocate 和其他所有裝置物件初始化 DIS,這些設定控件裝置 的WDFDEVICE_INIT 結構必須先呼叫,才能呼叫控制裝置的 WdfDeviceCreate

CtlDeviceFinishInitDeviceAdd

CtlDeviceFinishInitDeviceAdd 規則指定,如果驅動程式在 EvtDriverDeviceAdd 回呼函式中建立控制裝置物件,則必須在裝置建立之後呼叫 WdfControlFinishInitializing,並在從 EvtDriverDeviceAdd 回呼函式結束之前呼叫 WdfControlFinishInitializing。 此規則不適用於非 PnP 驅動程式。

CtlDeviceFinishInitDrEntry

CtlDeviceFinishInitDrEntry 規則會指定,如果驅動程式在 DriverEntry 回呼函式中建立控制裝置物件,則必須在裝置建立之後呼叫 WdfControlFinishInitializing ,並在從 EvtDriverDeviceAdd 回呼函式結束之前呼叫 WdfControlFinishInitializing。 此規則不適用於非 PnP 驅動程式。

DeviceCreateFail

DeviceCreateFail 規則指定當呼叫 WdfDeviceCreate 失敗時,EVT_WDF_DRIVER_DEVICE_ADD傳回錯誤狀態。

DeviceInitAllocate

DeviceInitAllocate 規則會指定,針對 PDO 裝置或控制裝置對象,架構裝置物件初始化方法 WdfPdoInitAllocateWdfControlDeviceInitAllocate 必須在驅動程式呼叫 WdfDeviceCreate 之前呼叫。

DeviceInitAPI

對於 FDO 裝置,必須先呼叫架構裝置物件初始化方法和架構 FDO 初始化方法,驅動程式才能呼叫裝置物件的 WdfDeviceCreate 方法。

DoubleDeviceInitFree

DoubleDeviceInitFree 規則指定驅動程式不應該釋放裝置初始化結構兩次。

DriverCreate

DriverCreate 規則指定使用核心模式驅動程式架構的驅動程式 (KMDF) 必須呼叫 WdfDriverCreate 方法,才能從其 DriverEntry 例程內建立架構驅動程序物件。

InitFreeDeviceCallback

InitFreeDeviceCallback 規則會指定如果驅動程式初始化新的架構裝置物件時遇到錯誤,而且驅動程式從對 WdfControlDeviceInitAllocate 的呼叫收到WDFDEVICE_INIT結構,則必須呼叫 WdfDeviceInitFree

InitFreeDeviceCreate

InitFreeDeviceCreate 規則指定驅動程式必須呼叫 WdfDeviceInitFree,而不是 WdfDeviceCreate,如果其中一個裝置物件初始化方法發生錯誤,以及驅動程式從呼叫 WdfControlDeviceInitAllocate 收到WDFDEVICE_INIT結構時。

InitFreeDeviceCreateType2

InitFreeDeviceCreateType2 規則指定驅動程式在呼叫 WdfDeviceInitFree 之後,不得呼叫 WdfDeviceCreate

InitFreeDeviceCreateType4

InitFreeDeviceCreateType4 規則指定驅動程式在呼叫 WdfDeviceCreate 時遇到錯誤,以及驅動程式從呼叫 WdfControlDeviceInitAllocate 的呼叫收到WDFDEVICE_INIT結構時,必須呼叫 WdfDeviceInitFree

InitFreeNull

InitFreeNull 規則會指定接收PWDFDEVICE_INIT為參數的 DIS 無法使用WDFDEVICE_INIT結構的 NULL 指標來呼叫。

MdlAfterReqCompletedIntIoctl

MdlAfterReqCompletedIntIoctl 規則指定在 EvtIoInternalDeviceControl 回呼函式內,記憶體描述元清單 (MDL) 在 I/O 要求完成之後無法存取。

MdlAfterReqCompletedIntIoctlA

MdlAfterReqCompletedIntIoctlA 規則會指定在 EvtIoInternalDeviceControl 回呼函式內,記憶體描述元清單 (MDL) 在 I/O 要求完成之後無法存取。

MdlAfterReqCompletedIoctl

MdlAfterReqCompletedIoctl 規則會指定在 EvtIoDeviceControl 回呼函式內,記憶體描述元清單 (MDL) 在 I/O 要求完成後無法存取。

MdlAfterReqCompletedIoctlA

MdlAfterReqCompletedIoctlA 規則指定在 EvtIoDeviceControl 回呼函式中,記憶體描述元清單 (MDL) 在 I/O 要求完成之後無法存取。

MdlAfterReqCompletedRead

MdlAfterReqCompletedRead 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的記憶體描述元清單 (MDL) 物件。

MdlAfterReqCompletedReadA

MdlAfterReqCompletedReadA 規則會指定在 EvtIoRead 回呼函式中,在 I/O 要求完成後,無法存取擷取的記憶體描述元清單 (MDL) 物件。

MdlAfterReqCompletedWrite

MdlAfterReqCompletedWrite 規則會指定在 EvtIoWrite 回呼函式內,記憶體描述元清單 (MDL) 在 I/O 要求完成後無法存取。

MdlAfterReqCompletedWriteA

MdlAfterReqCompletedWriteA 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成後,無法存取擷取的記憶體描述元清單 (MDL) 物件。

MemAfterReqCompletedIntIoctl

MemAfterReqCompletedIntIoctl 規則指定在 EvtIoInternalDeviceControl 回呼函式內,在 I/O 要求完成之後,就無法存取架構記憶體物件。

MemAfterReqCompletedIntIoctlA

MemAfterReqCompletedIntIoctlA 規則指定在 EvtIoInternalDeviceControl 回呼函式內,在 I/O 要求完成之後,就無法存取架構記憶體物件。

MemAfterReqCompletedIoctl

MemAfterReqCompletedIoctl 規則指定在 EvtIoDeviceControl 回呼函式內,在 I/O 要求完成之後,就無法存取架構記憶體物件。

MemAfterReqCompletedIoctlA

MemAfterReqCompletedIoctlA 規則會指定在 EvtIoDeviceControl 回呼函式內,在 I/O 要求完成之後,就無法存取架構記憶體物件。

MemAfterReqCompletedRead

MemAfterReqCompletedRead 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,就無法存取架構記憶體物件。

MemAfterReqCompletedReadA

MemAfterReqCompletedReadA 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,就無法存取架構記憶體物件。

MemAfterReqCompletedWrite

MemAfterReqCompletedWrite 規則指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,就無法存取架構記憶體物件。

MemAfterReqCompletedWriteA

MemAfterReqCompletedWriteA 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後無法存取架構記憶體物件。

NullCheck

NullCheck 規則會確認驅動程式程式代碼內的 NULL 值稍後不會在驅動程式中取消參考。 如果下列任一條件成立,此規則會報告瑕疵:

  • 稍後會取消參考的 NULL 指派。
  • 驅動程式中有一個全域/參數,可能是稍後取值為 NULL 的程式,而且驅動程式中有明確檢查,表示指標的初始值可能是 NULL。

使用 NullCheck 規則違規時,追蹤樹狀結構窗格中會醒目提示最相關的程式代碼語句。 如需使用報表輸出的詳細資訊,請參閱 靜態驅動程序驗證器報表了解追蹤查看器

PdoDeviceInitAPI

PdoDeviceInitAPI 規則會指定 WdfPdoInitAllocate 和所有其他裝置物件初始化 DIS,這些設定實體裝置物件的WDFDEVICE_INIT結構, (PDO) 必須先呼叫,驅動程式才能呼叫 PDO 的 WdfDeviceCreate

PdoInitFreeDeviceCallback

如果驅動程式呼叫任何架構裝置物件初始化函式時發生錯誤, PdoInitFreeDeviceCallback 規則會指定驅動程式必須呼叫 WdfDeviceInitFree

PdoInitFreeDeviceCreate

PdoInitFreeDeviceCreate 規則會指定驅動程式必須呼叫 WdfDeviceInitFree,而不是 WdfDeviceCreate,如果其中一個裝置物件初始化函式發生錯誤,以及驅動程式是否從呼叫 WdfPdoInitAllocate 收到WDFDEVICE_INIT結構。

PdoInitFreeDeviceCreateType2

PdoInitFreeDeviceCreateType2 規則指定驅動程式在呼叫 WdfDeviceInitFree 之後,不得呼叫 WdfDeviceCreate

PdoInitFreeDeviceCreateType4

如果驅動程式呼叫 WdfDeviceCreate 時發生錯誤,PdoInitFreeDeviceCreateType4 規則會指定驅動程式必須呼叫 WdfDeviceInitFree

ControlDeviceInitAllocate

ControlDeviceInitAllocate 規則會指定控件裝置對象的驅動程式必須在驅動程式呼叫 WdfDeviceCreate 之前呼叫架構裝置物件初始化方法 WdfControlDeviceInitAllocate

InputBufferAPI

InputBufferAPI 規則會指定在 EvtIoRead回呼函式中使用正確的緩衝區擷取 DIS。 在 EvtIoRead 回呼函式中,無法呼叫下列 DIS 進行緩衝區擷取:

若要選取 DDI 使用規則集

  1. 在 Microsoft Visual Studio 中選取您的驅動程式專案 (.vcxProj) 。 從 [ 驅動程式] 功能表中,按兩下 [ 啟動靜態驅動程序驗證程式...]。

  2. 按兩下 [ 規則] 索引 標籤。在 [規則集] 底下,選取 [DDIUsage]。

    若要從 Visual Studio 開發人員命令提示字元視窗中選取預設規則集,請使用 /check 選項指定 DDIUsage.sdv。 例如:

    msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    如需詳細資訊,請參閱 使用靜態驅動程式驗證器在驅動程式靜態驅動程式驗證器命令中尋找瑕疵, (MSBuild)