共用方式為


DDI 使用量規則集 (NDIS)

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

本節內容

主題 描述

Init_DeRegisterInterrupt

Init_DeRegisterInterrupt規則會指定如果在 MPInitilize 期間至少呼叫 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則 NdisMDeregisterScatterGatherDma 函式應該至少在 MiniportHaltEx 中呼叫一次。

NdisFDeregisterFilterDriver

篩選驅動程序必須從 FilterDriverUnload 例程呼叫 NdisFDeregisterFilterDriver

NdisMDeregisterInterruptEx

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

NullCheck

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

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

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

若要選取 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) 。