共用方式為


(KMDF) 警告規則集

使用這些規則來確認您的驅動程式可以在各種內容中正確處理 IRP,並遵循 Microsoft 建議的最佳做法。

本節內容

主題 描述

DeferredRequestCompleted

DeferredRequestCompleted 規則會指定如果向驅動程式的預設 I/O 佇列呈現的 I/O 要求未在回呼函式中完成,但延遲處理時,除非要求已轉送並傳遞至架構,否則除非呼叫 WdfRequestStopAcknowledge 方法,否則必須在延後處理回呼函式中完成要求。

DriverAttributeChanged

DriverAttributeChanged 規則指定驅動程式不得變更 KMDF 驅動程式的執行層級或同步處理範圍。

DrvAckIoStop

DrvAckIoStop 規則會確認驅動程式在電源受控佇列關閉電源時知道擱置的要求,而且驅動程式會據以認可、完成或取消擱置的要求。 在自我管理 I/O 要求的情況下,驅動程式也應該正確地處理其 EvtDeviceSelfManagedIoSuspend 函式 中的這些要求。 在關閉電源期間無法處理這些要求的驅動程式會導致 錯誤檢查0x9F:DRIVER_POWER_STATE_FAILURE

EvtIoResumeGetParam

EvtIoResumeGetParam 規則指定 EvtIoResumeGetParam 回呼函式內不會呼叫 WdfRequestGetParameters

EvtIoStopGetParam

EvtIoStopGetParam 規則會檢查 EvtIoStop 回呼內未呼叫 WdfRequestGetParameters

EvtIoStopResume

EvtIoStopResume 規則會指定,如果驅動程式註冊 EvtIoStop 回呼函式,然後使用 Requeue 參數等於 FALSE 呼叫 WdfRequestStopAcknowledge,則驅動程式必須註冊 EvtIoResume 回呼函式。 當裝置再次進入 D0 狀態時,架構會將要求傳遞給 EvtIoResume 回呼函式。

EvtSurpriseRemoveNoRequestComplete

EvtSurpriseRemoveNoRequestComplete 規則指定 WDF 驅動程式不應該完成來自 EvtDeviceSurpriseRemoval 回呼的要求,而是應該使用自我管理的 I/O 回呼函式。 EvtDeviceSurpriseRemoval 回呼不會與向下電源路徑同步處理。

FDOPowerPolicyOwnerAPI

FDOPowerPolicyOwnerAPI 規則會指定如果 FDO 驅動程式撤銷電源原則擁有權,則 WdfDeviceInitSetPowerPolicyEventCallbacksWdfDeviceAssignS0IdleSettingsWdfDeviceAssignSxWakeSettings 的方法只能呼叫驅動程式為電源原則擁有者的執行路徑。 SDV 發出此規則的警告。

NoCancelFromEvtSurpriseRemove

NoCancelFromEvtSurpriseRemove 規則指定 WDF 驅動程式不應該取消來自 EvtDeviceSurpriseRemoval 回呼函式的要求,而是應該使用自我管理的 I/O 回呼函式。 EvtDeviceSurpriseRemoval 回呼函式不會與向下電源路徑同步處理。

PagedCodeAtD0

PagedCodeAtD0 規則指定驅動程式不得在電源啟動程式代碼路徑中的回呼函式內將程式代碼標示為可分頁。

ParentObjectCheck

ParentObjectCheck 規則指定驅動程式應該呼叫 WdfMemoryCreate,以使用 WDF_OBJECT_ATTRIBUTES 結構指定父物件。 如果驅動程式未設定架構記憶體物件的父物件,則架構會將驅動程式設定為預設父代,因此除非驅動程式明確刪除架構記憶體物件,否則它會保留在記憶體中,直到驅動程式物件卸除為止。

ReqNotCanceledLocal

ReqNotCanceledLocal 規則會指定,如果標示為可取消的要求在預設 I/O 佇列回呼函式中完成,則必須在 I/O 要求上呼叫 WdfRequestUnmarkCancelable 方法,才能完成。 除非要求在呼叫 WdfRequestUnmarkCancelable 之前取消,否則必須完成 I/O 要求。

ReqSendFail

ReqSendFail 規則指定驅動程式必須在 WdfRequestSend 方法失敗的情況下設定正確的完成狀態。

RequestCompletedLocal

RequestCompletedLocal 規則會指定如果在任何 EvtIoDefault、EvtIoReadEvtIoWriteEvtIoDeviceControlEvtIoInternalDeviceControl 回呼函式中未呼叫 I/O 要求,而且如果 WdfRequestMarkCancelable 未在回呼函式內呼叫,驅動程式程式代碼中的要求完成可能會發生問題。

RequestForUrbXrb

如果用戶端驅動程式呼叫 WdfUsbTargetDeviceCreateWithParameters,並指定WDF_USB_DEVICE_CREATE_CONFIG結構中的用戶端合約版本USBD_CLIENT_CONTRACT_VERSION_602, (使用 USB 驅動程式堆疊的新功能進行 Windows 8) ,則內部使用 URB 的 DDI 只會在下列任何先決條件適用時使用 URB 內容

SyncReqSend

SyncReqSend 規則會指定所有同步傳送要求都是使用同步特定的 KMDF 裝置驅動程式介面方法來完成,而且方法已設定非零的逾時值。

SyncReqSend2

SyncReqSend2 規則指定同步要求傳送具有非零逾時值。

選取警告規則集

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

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

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

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

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