共用方式為


IrpTracking 規則集 (WDM)

使用這些規則來確認您的驅動程式已正確追蹤 I/O 要求封包 (IRP),如此一來,當 IRP 未完成時,不會移除裝置。

本節內容

主題 說明

IoReleaseRemoveLockAndWaitOutsideRemoveDevice

IoReleaseRemoveLockAndWaitOutsideRemoveDevice 規則指定 IoReleaseRemoveLockAndWait 不應該在具有 PnP 驅動程式IRP_MN_REMOVE_DEVICE IRP_MJ_PNP外部呼叫。

NsRemoveLockMnRemove

NsRemoveLockMnRemove 規則會驗證驅動程式在使用 MinorFunction IRP_MN_REMOVE_DEVICE 處理IRP_MJ_PNP時不會傳回STATUS_NOT_SUPPORTED。 此規則僅適用於 FDO 和 FIDO 驅動程式。

NsRemoveLockMnSurpriseRemove

NsRemoveLockMnSurpriseRemove 規則會驗證驅動程式在處理具有 minorFunction IRP_MN_SUPRISE_REMOVAL 的IRP_MJ_PNP要求時,不會傳回STATUS_NOT_SUPPORTED。 此規則僅適用於 FDO 和 FIDO 驅動程式。

NsRemoveLockQueryMnRemove

NsRemoveLockQueryMnRemove 規則會驗證驅動程式在使用 MinorFunction IRP_MN_QUERY_REMOVE 處理IRP_MJ_PNP時不會傳回STATUS_NOT_SUPPORTED。 此規則僅適用於 FDO 和 FIDO 驅動程式。

RemoveLock

RemoveLock 規則會指定正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 此外,在IRP_MJ_PNP或IRP_MJ_POWER例程結束時,驅動程式不應該保留 RemoveLock

RemoveLockCheck

RemoveLockCheck 規則會確認使用 MinorFunction IRP_MN_REMOVE_DEVICE 處理IRP_MJ_PNP時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 的呼叫。

RemoveLockForward

RemoveLockForward 規則會確認將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock IoReleaseRemoveLock 的呼叫。

RemoveLockForward2

RemoveLockForward2 規則會確認將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock IoReleaseRemoveLock 的呼叫。

RemoveLockForwardDeviceControl

RemoveLockForwardDeviceControl 規則會確認當驅動程式使用 IoCallDriver 將 IRP 轉送至另一個裝置時,會正確使用 IoAcquireRemoveLock IoReleaseRemoveLock呼叫。

RemoveLockForwardDeviceControl2

RemoveLockForwardDeviceControl2 規則會確認當驅動程式使用 IoCallDriver 將 IRP 轉送至另一個裝置時,會正確使用 IoAcquireRemoveLock IoReleaseRemoveLock呼叫。

RemoveLockForwardDeviceControlInternal

RemoveLockForwardDeviceControlInternal 規則會確認使用 IoCallDriver 將 IRP 轉送至另一個裝置時,正確使用 IoAcquireRemoveLock IoReleaseRemoveLock呼叫。

RemoveLockForwardDeviceControlInternal2

RemoveLockForwardDeviceControlInternal2 規則會驗證使用 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫,在使用 IoCallDriver 將 IRP 轉送至另一個裝置時正確使用。

RemoveLockForwardRead

RemoveLockForwardRead 規則會確認已正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。

RemoveLockForwardRead2

RemoveLockForwardRead2 規則會確認使用 IoCallDriver 將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫。

RemoveLockForwardWrite

RemoveLockForwardWrite 規則會確認使用 IoCallDriver 將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock IoReleaseRemoveLock呼叫。

RemoveLockForwardWrite2

RemoveLockForwardWrite2 規則會確認使用 IoCallDriver 將 IRP 轉送至另一部裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫。

RemoveLockMnRemove

RemoveLockMnRemove 規則會確認使用 MinorFunction IRP_MN_REMOVE_DEVICE 處理IRP_MJ_PNP時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 的呼叫。

RemoveLockMnRemove2

RemoveLockMnRemove2 規則會確認呼叫 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 會在 IRP 轉送至較低驅動程式之前處理IRP_MN_REMOVE_DEVICE要求時正確使用。

RemoveLockMnSurpriseRemove

RemoveLockMnSurpriseRemove 規則會確認呼叫 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 在處理IRP_MJ_PNP與 MinorFunction IRP_MN_SUPRISE_REMOVAL時,會正確使用。 驅動程式應該先取得移除鎖定,再將 IRP 轉送到堆疊上。

RemoveLockQueryMnRemove

RemoveLockQueryMnRemove 規則會確認使用 MinorFunction IRP_MN_QUERY_REMOVE_DEVICE 處理IRP_MJ_PNP時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫。 驅動程式應該先取得移除鎖定,再將 IRP 轉送到堆疊上。

RemoveLockRelease2

Rule RemoveLockRelease2 會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseCleanup

RemoveLockReleaseCleanup 規則會指定對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 對 IoAcquireRemoveLock 的每個呼叫都必須有對 IoReleaseRemoveLock相符呼叫。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseClose

RemoveLockReleaseClose 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseCreate

RemoveLockReleaseCreate 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫在嚴格替代中使用。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseDeviceControl

RemoveLockReleaseDeviceControl 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseInternalDeviceControl

RemoveLockReleaseInternalDeviceControl 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleasePnp

RemoveLockReleasePnp 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫在嚴格替代中使用。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleasePower

RemoveLockReleasePower 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseRead

RemoveLockReleaseRead 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫在嚴格替代中使用。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseShutdown

RemoveLockReleaseShutdown 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseSystemControl

RemoveLockReleaseSystemControl 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

RemoveLockReleaseWrite

RemoveLockReleaseWrite 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。

選取 IrpTracking 規則集

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

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

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

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

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