共用方式為


DDI 使用規則集 (NDIS)

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

本節中

主題 說明

Init_DeRegisterInterrupt

Init_DeRegisterInterrupt 規則規定,如果在 MPInitialize 期間至少呼叫一次 NdisMRegisterInterruptEx,則在 MPHaltEx 中應至少呼叫一次 NdisMDeregisterInterruptEx

Init_NdisAllocateIoWorkItem

Init_NdisAllocateIoWorkItem規則會指定如果在 MiniportInitializeEx 期間至少呼叫 NdisAllocateIoWorkItem 一次,則 NdisFreeIoWorkItem 函式應該:

Init_RegisterInterrupt

Init_RegisterInterrupt規則會指定如果初始化程式或迷你埠驅動程式停止期間發生錯誤,則必須復原通常在初始化期間發生的中斷註冊。

如果在 MiniportInitializeEx 期間呼叫 NdisMRegisterInterruptEx 至少一次,則必須在 MiniportHaltEx 中呼叫 NdisMDeregisterInterruptEx 函式至少一次。

Init_RegisterSG

Init_RegisterSG規則規定,若在初始化過程中或在中止迷你端口驅動程式時出現問題,必須復原通常在初始化期間進行的分散收集清單(SG)註冊。

如果在 MiniportInitializeEx 期間呼叫 NdisMRegisterScatterGatherDma 至少一次,則應該在 MiniportHaltEx 中呼叫 NdisMDeregisterScatterGatherDma 函式至少一次。

NdisFDeregisterFilterDriver

篩選驅動程式必須從其 FilterDriverUnload 常式呼叫 NdisFDeregisterFilterDriver

NdisMDeregisterInterruptEx

在 NdisMDeregisterInterruptEx 傳回控制之後,迷你埠驅動程式無法呼叫 NdisMSynchronizeWithInterruptEx 函式。

空值檢查

NullCheck 規則會驗證驅動程式程式碼中的 NULL 值稍後在驅動程式中不會被解引用。 如果下列任一條件為true,則此規則會報告缺陷:

  • 稍後會解除參考一個被指派為 NULL 的變數。
  • 驅動程式中有一個全域變數或參數,這個變數或參數的初始值可能為 Null,而且稍後可能會被取消參考。驅動程式中有一個明確的檢查指出指標的初始值可能是 Null。

如果 NullCheck 規則違規,最相關的程式碼陳述式會在追蹤樹狀結構窗格中醒目提示。 如需使用報表輸出的詳細資訊,請參閱 靜態驅動程式驗證器報表瞭解追蹤檢視器

選取 DDI 使用規則集

  1. 在 Visual Studio Microsoft中選取您的驅動程式專案 (.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)