共用方式為


IRP 記錄

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

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

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

WMI 記錄

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

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

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

啟用此選項

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

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

  • 在命令行

    在命令行中,IRP 記錄選項會以 0x400 (Bit 10) 表示。

    若要啟用 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 會繼續執行指定的時間長度,並儲存到達時的新資訊。 預設值為 0。

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