共用方式為


IRP 記錄

驅動程式驗證器的 IRP 記錄功能會監視驅動程式使用 IRP,並記錄 IRP 使用量。 此記錄會儲存為 WMI 資訊。

Windows 驅動程式套件 (WDK) 包含可將此 WMI 記錄轉換成文字檔的工具 DC2WMIParser (dc2wmiparser.exe) 。

此驅動程式驗證器選項僅適用于 Windows Server 2003 和更新版本。

WMI 記錄

WMI 記錄不會包含每個裝置超過 20 個 IRP。 記錄第二十一個 IRP 之後,就會取代第一筆 IRP 記錄。 因此,如果記錄列出 20 個 IRP,這些一律是最新的 20,但無法知道其中哪一個是最新的 IRP。

由於 WMI 記錄儲存在記憶體中,因此當電腦重新開機時,將會予以清除。 因此,使用 DC2WMIParser 將此資訊儲存至檔案。

如果您使用 /t 選項,DC2WMIParser 將會在指定的持續時間持續執行。 在此情況下,記錄可以包含每個裝置超過 20 個 IRP (每個取樣期間最多 20 個 IRP) 。

啟用此選項

您可以使用驅動程式驗證器管理員或Verifier.exe命令列,為一或多個驅動程式啟用 IRP 記錄功能。

若要啟用 IRP 記錄功能,您也必須啟用 I/O 驗證

  • 在命令列

    在命令列上,IRP 記錄選項是由 0x400 (位 10) 表示0x400。

    若要啟用 IRP 記錄,請使用旗標值0x410,或將0x410新增至旗標值。 此值會啟動 I/O 驗證 (0x10) 和 IRP 記錄 (0x400) 。 例如:

    verifier /flags 0x410 /driver MyDriver.sys
    

    下一次開機之後,此功能將會處於作用中狀態。

    在 Windows Vista 和更新版本的 Windows 上,您也可以藉由將 /volatile 參數新增至 命令,來啟用和停用 IRP 記錄,而不需要重新開機電腦。 例如:

    verifier /volatile /flags 0x410 /adddriver MyDriver.sys
    

    此設定會立即生效,但當您關閉或重新開機電腦時遺失。 如需詳細資訊,請參閱 使用變動性設定

  • 使用驅動程式驗證器管理員

    1. 啟動驅動程式驗證器管理員。 在 [命令提示字元] 視窗中輸入 驗證程式
    2. 選取 [為程式碼開發人員建立自訂設定] () ,然後按 [ 下一步]。
    3. 從完整清單中選取 [選取個別設定]。
    4. 選取 [ (檢查 IRP 記錄I/O 驗證) 。

DC2WMIParser

DC2WMIParser 是一種工具,可收集驅動程式驗證器所建立的 WMI IRP 記錄,並將此記錄轉換成文字檔。

DC2WMIParser 語法如下所示:

dc2wmiparser [/f File] [/t Time]

參數具有下列意義:

/f檔案
指定要寫入之記錄檔的完整路徑和檔案名。 相對路徑會相對於目前目錄取得。 如果省略此專案,將會使用目前目錄中的檔案名 dc2verifier.act。

/t時間
指定 DC2WMIParser 將繼續執行的時間長度,以分鐘為單位。 如果 Time 等於零,DC2WMIParser 將會記錄驅動程式驗證器已儲存的所有 WMI IRP 資訊,然後結束。 如果 Time 設定為正值,DC2WMIParser 將會繼續執行指定的時間長度,並儲存抵達時的新資訊。 預設值是零。

DC2WMIParser 記錄檔的格式

DC2WMIParser 所產生的檔案是 ASCII 文字檔。

此檔案的第一行包含十進位數,代表登入檔案中的裝置數目。

在第一行之後,檔案會分成區段;每個區段都會描述一部裝置。

每個裝置的格式為:

  • 在單行上: 裝置名稱。

  • 在單行上: 指定此裝置的目標裝置類型和函式數目的十進位數。

  • 每個裝置類型和功能各有一行: 三個十六進位數位,以逗號分隔。 這些代表裝置類型,以及在此記錄中記錄的最低和最高函式。

  • 在每個裝置類型和函式的一組行中:

    • 具有小數點的單行,指定目前裝置類型的 IOCTL 計數。
    • 每個 IOCTL 各一行。 每一行都包含六個十六進位數位,並以逗號分隔。 這些指定裝置類型、函式、方法、存取、輸入緩衝區的長度,以及輸出緩衝區的長度。

以下是範例 DC2WMIParser 記錄檔。 在實際檔案中,不會有任何空格、批註或空白行,但已新增至此範例,使其更清楚。

2           There are two devices described by this log file.

The first device begins here:

  DP(1)0x7e00-0x21dbda400+3   Device name of the first device
  2                           Number of device type IOCTLs targeted at this device

    7,12,12                     First targeted device: device type 7, low function 12, high function 12
    2d,420,420                  Second targeted device: device type 2d, low function 420, high function 420

    1                           Number of IOCTLs for first targeted  device (type 7)
      7,12,0,0,90,0               Device type 7, function 12, method 0, access 0, inbuflen 90, outbuflen 0
    1                           Number of IOCTLs for second targeted device (type 2d)
      2d,420,0,0,c,0              Device type 2d, function 420, method 0, access 0, inbuflen c, outbuflen 0

The second device begins here:

  DP(1)0x7e00-0x21dbda400+2   Device name of the second device
  2                           Number of device type IOCTLs targeted at this device

    7,12,12                     First targeted device: device type 7, low function 12, high function 12
    2d,420,420                  Second targeted device: device type 2d, low function 420, high function 420


    1                           Number of IOCTLs for first targeted  device (type 7)
      7,12,0,0,90,0               Device type 7, function 12, method 0, access 0, inbuflen 90, outbuflen 0
    1                           Number of IOCTLs for second targeted device (type 2d)
      2d,420,0,0,c,0              Device type 2d, function 420, method 0, access 0, inbuflen c, outbuflen 0