DDI 使用量規則集 (KMDF)
使用這些規則來確認您的驅動程序正確使用 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個 DIS 可作為可能的緩衝區存取方法。 |
|
BufAfterReqCompletedReadA 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 有14個 DIS 可作為可能的緩衝區存取方法。 |
|
BufAfterReqCompletedWrite 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 |
|
BufAfterReqCompletedWriteA 規則會指定在 EvtIoWrite 回呼函式內,在 I/O 要求完成之後,無法存取擷取的 I/O 要求緩衝區。 |
|
ChildDeviceInitApi 規則會指定針對子裝置,必須先呼叫架構裝置物件初始化方法,驅動程式才能呼叫子裝置物件的 WdfDeviceCreate 方法。 |
|
ControDeviceDeleted 規則會指定,如果 PnP 驅動程式建立控制裝置對象,驅動程式必須在驅動程式卸除之前,先刪除其中一個清除回呼函式中的控制裝置物件。 |
|
ControlDeviceInitAPI 規則指定 WdfControlDeviceInitAllocate 和其他所有裝置物件初始化 DIS,這些設定控件裝置 的WDFDEVICE_INIT 結構必須先呼叫,才能呼叫控制裝置的 WdfDeviceCreate 。 |
|
CtlDeviceFinishInitDeviceAdd 規則指定,如果驅動程式在 EvtDriverDeviceAdd 回呼函式中建立控制裝置物件,則必須在裝置建立之後呼叫 WdfControlFinishInitializing,並在從 EvtDriverDeviceAdd 回呼函式結束之前呼叫 WdfControlFinishInitializing。 此規則不適用於非 PnP 驅動程式。 |
|
CtlDeviceFinishInitDrEntry 規則會指定,如果驅動程式在 DriverEntry 回呼函式中建立控制裝置物件,則必須在裝置建立之後呼叫 WdfControlFinishInitializing ,並在從 EvtDriverDeviceAdd 回呼函式結束之前呼叫 WdfControlFinishInitializing。 此規則不適用於非 PnP 驅動程式。 |
|
DeviceCreateFail 規則指定當呼叫 WdfDeviceCreate 失敗時,EVT_WDF_DRIVER_DEVICE_ADD傳回錯誤狀態。 |
|
DeviceInitAllocate 規則會指定,針對 PDO 裝置或控制裝置對象,架構裝置物件初始化方法 WdfPdoInitAllocate 或 WdfControlDeviceInitAllocate 必須在驅動程式呼叫 WdfDeviceCreate 之前呼叫。 |
|
對於 FDO 裝置,必須先呼叫架構裝置物件初始化方法和架構 FDO 初始化方法,驅動程式才能呼叫裝置物件的 WdfDeviceCreate 方法。 |
|
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為參數的 DIS 無法使用WDFDEVICE_INIT結構的 NULL 指標來呼叫。 |
|
MdlAfterReqCompletedIntIoctl 規則指定在 EvtIoInternalDeviceControl 回呼函式內,記憶體描述元清單 (MDL) 在 I/O 要求完成之後無法存取。 |
|
MdlAfterReqCompletedIntIoctlA 規則會指定在 EvtIoInternalDeviceControl 回呼函式內,記憶體描述元清單 (MDL) 在 I/O 要求完成之後無法存取。 |
|
MdlAfterReqCompletedIoctl 規則會指定在 EvtIoDeviceControl 回呼函式內,記憶體描述元清單 (MDL) 在 I/O 要求完成後無法存取。 |
|
MdlAfterReqCompletedIoctlA 規則指定在 EvtIoDeviceControl 回呼函式中,記憶體描述元清單 (MDL) 在 I/O 要求完成之後無法存取。 |
|
MdlAfterReqCompletedRead 規則會指定在 EvtIoRead 回呼函式內,在 I/O 要求完成之後,無法存取擷取的記憶體描述元清單 (MDL) 物件。 |
|
MdlAfterReqCompletedReadA 規則會指定在 EvtIoRead 回呼函式中,在 I/O 要求完成後,無法存取擷取的記憶體描述元清單 (MDL) 物件。 |
|
MdlAfterReqCompletedWrite 規則會指定在 EvtIoWrite 回呼函式內,記憶體描述元清單 (MDL) 在 I/O 要求完成後無法存取。 |
|
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 值稍後不會在驅動程式中取消參考。 如果下列任一條件成立,此規則會報告瑕疵:
使用 NullCheck 規則違規時,追蹤樹狀結構窗格中會醒目提示最相關的程式代碼語句。 如需使用報表輸出的詳細資訊,請參閱 靜態驅動程序驗證器報表 和 了解追蹤查看器。 |
|
PdoDeviceInitAPI 規則會指定 WdfPdoInitAllocate 和所有其他裝置物件初始化 DIS,這些設定實體裝置物件的WDFDEVICE_INIT結構, (PDO) 必須先呼叫,驅動程式才能呼叫 PDO 的 WdfDeviceCreate。 |
|
如果驅動程式呼叫任何架構裝置物件初始化函式時發生錯誤, PdoInitFreeDeviceCallback 規則會指定驅動程式必須呼叫 WdfDeviceInitFree 。 |
|
PdoInitFreeDeviceCreate 規則會指定驅動程式必須呼叫 WdfDeviceInitFree,而不是 WdfDeviceCreate,如果其中一個裝置物件初始化函式發生錯誤,以及驅動程式是否從呼叫 WdfPdoInitAllocate 收到WDFDEVICE_INIT結構。 |
|
PdoInitFreeDeviceCreateType2 規則指定驅動程式在呼叫 WdfDeviceInitFree 之後,不得呼叫 WdfDeviceCreate。 |
|
如果驅動程式呼叫 WdfDeviceCreate 時發生錯誤,PdoInitFreeDeviceCreateType4 規則會指定驅動程式必須呼叫 WdfDeviceInitFree。 |
|
ControlDeviceInitAllocate 規則會指定控件裝置對象的驅動程式必須在驅動程式呼叫 WdfDeviceCreate 之前呼叫架構裝置物件初始化方法 WdfControlDeviceInitAllocate。 |
|
InputBufferAPI 規則會指定在 EvtIoRead回呼函式中使用正確的緩衝區擷取 DIS。 在 EvtIoRead 回呼函式中,無法呼叫下列 DIS 進行緩衝區擷取: |
若要選取 DDI 使用規則集
在 Microsoft Visual Studio 中選取您的驅動程式專案 (.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) 。