IrpTracking 規則集 (WDM)
使用這些規則來確認您的驅動程式已正確追蹤 I/O 要求封包 (IRP),如此一來,當 IRP 未完成時,不會移除裝置。
本節內容
主題 | 說明 |
---|---|
IoReleaseRemoveLockAndWaitOutsideRemoveDevice 規則指定 IoReleaseRemoveLockAndWait 不應該在具有 PnP 驅動程式IRP_MN_REMOVE_DEVICE IRP_MJ_PNP外部呼叫。 |
|
NsRemoveLockMnRemove 規則會驗證驅動程式在使用 MinorFunction IRP_MN_REMOVE_DEVICE 處理IRP_MJ_PNP時不會傳回STATUS_NOT_SUPPORTED。 此規則僅適用於 FDO 和 FIDO 驅動程式。 |
|
NsRemoveLockMnSurpriseRemove 規則會驗證驅動程式在處理具有 minorFunction IRP_MN_SUPRISE_REMOVAL 的IRP_MJ_PNP要求時,不會傳回STATUS_NOT_SUPPORTED。 此規則僅適用於 FDO 和 FIDO 驅動程式。 |
|
NsRemoveLockQueryMnRemove 規則會驗證驅動程式在使用 MinorFunction IRP_MN_QUERY_REMOVE 處理IRP_MJ_PNP時不會傳回STATUS_NOT_SUPPORTED。 此規則僅適用於 FDO 和 FIDO 驅動程式。 |
|
RemoveLock 規則會指定正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 此外,在IRP_MJ_PNP或IRP_MJ_POWER例程結束時,驅動程式不應該保留 RemoveLock。 |
|
RemoveLockCheck 規則會確認使用 MinorFunction IRP_MN_REMOVE_DEVICE 處理IRP_MJ_PNP時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 的呼叫。 |
|
RemoveLockForward 規則會確認將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockForward2 規則會確認將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockForwardDeviceControl 規則會確認當驅動程式使用 IoCallDriver 將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockForwardDeviceControl2 規則會確認當驅動程式使用 IoCallDriver 將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockForwardDeviceControlInternal 規則會確認使用 IoCallDriver 將 IRP 轉送至另一個裝置時,正確使用 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockForwardDeviceControlInternal2 規則會驗證使用 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫,在使用 IoCallDriver 將 IRP 轉送至另一個裝置時正確使用。 |
|
RemoveLockForwardRead 規則會確認已正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockForwardRead2 規則會確認使用 IoCallDriver 將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockForwardWrite 規則會確認使用 IoCallDriver 將 IRP 轉送至另一個裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockForwardWrite2 規則會確認使用 IoCallDriver 將 IRP 轉送至另一部裝置時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 |
|
RemoveLockMnRemove 規則會確認使用 MinorFunction IRP_MN_REMOVE_DEVICE 處理IRP_MJ_PNP時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 的呼叫。 |
|
RemoveLockMnRemove2 規則會確認呼叫 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 會在 IRP 轉送至較低驅動程式之前處理IRP_MN_REMOVE_DEVICE要求時正確使用。 |
|
RemoveLockMnSurpriseRemove 規則會確認呼叫 IoAcquireRemoveLock 和 IoReleaseRemoveLockAndWait 在處理IRP_MJ_PNP與 MinorFunction IRP_MN_SUPRISE_REMOVAL時,會正確使用。 驅動程式應該先取得移除鎖定,再將 IRP 轉送到堆疊上。 |
|
RemoveLockQueryMnRemove 規則會確認使用 MinorFunction IRP_MN_QUERY_REMOVE_DEVICE 處理IRP_MJ_PNP時,會正確使用對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫。 驅動程式應該先取得移除鎖定,再將 IRP 轉送到堆疊上。 |
|
Rule RemoveLockRelease2 會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseCleanup 規則會指定對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 對 IoAcquireRemoveLock 的每個呼叫都必須有對 IoReleaseRemoveLock 的相符呼叫。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseClose 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseCreate 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫在嚴格替代中使用。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseDeviceControl 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseInternalDeviceControl 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleasePnp 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫在嚴格替代中使用。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleasePower 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseRead 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫在嚴格替代中使用。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseShutdown 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseSystemControl 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
|
RemoveLockReleaseWrite 規則會確認對 IoAcquireRemoveLock 和 IoReleaseRemoveLock 的呼叫會用於嚴格替代。 此外,在分派例程結束時,驅動程式不應保留移除鎖定。 |
選取 IrpTracking 規則集
在 Microsoft Visual Studio 中選取您的驅動程式專案 (.vcxProj)。 從 [驅動程式] 功能表中,按兩下 [啟動靜態驅動程序驗證程式...]。
按兩下 [規則] 索引標籤。在 [規則集] 底下,選取 [IrpTracking]。
若要從 Visual Studio 開發人員命令提示字元視窗中選取預設規則集,請使用 /check 選項指定 IrpTracking.sdv。 例如:
msbuild /t:sdv /p:Inputs="/check:IrpTracking.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
如需詳細資訊,請參閱 使用靜態驅動程式驗證器在驅動程式 和 靜態驅動程式驗證器命令中尋找瑕疵 (MSBuild) 。