Ведение журнала IRP

Функция ведения журнала IRP средства проверки драйверов отслеживает использование драйвера irP и записывает сведения об использовании IRP. Эта запись хранится в виде сведений WMI.

Комплект драйверов Windows (WDK) включает средство DC2WMIParser (dc2wmiparser.exe), которое может преобразовать эту запись WMI в текстовый файл.

Этот параметр средства проверки драйверов доступен только в Windows Server 2003 и более поздних версиях.

Запись WMI

Запись WMI не будет включать более двадцати IRP для каждого устройства. После записи двадцать первого IRP заменяется первая запись IRP. Таким образом, если запись перечисляет двадцать IRP, это всегда самые последние двадцать, но нет никакого способа узнать, кто из них является самым последним.

Так как запись WMI хранится в памяти, она будет удалена при перезагрузке компьютера. Поэтому используйте DC2WMIParser, чтобы сохранить эти сведения в файл.

Если вы используете параметр /t , DC2WMIParser будет работать непрерывно в течение указанного времени. В этом случае запись может включать более двадцати irPs на устройство (до двадцати IRP за каждый период выборки).

Активация этого параметра

Функцию ведения журнала IRP для одного или нескольких драйверов можно активировать с помощью диспетчера проверки драйверов или командной строки Verifier.exe.

Чтобы активировать функцию ведения журнала IRP, необходимо также активировать проверку ввода-вывода.

  • В командной строке

    В командной строке параметр ведения журнала IRP представлен 0x400 (бит 10).

    Чтобы активировать ведение журнала IRP, используйте значение флага 0x410 или добавьте 0x410 к значению флага. Это значение активирует проверку ввода-вывода (0x10) и ведение журнала IRP (0x400). Пример:

    verifier /flags 0x410 /driver MyDriver.sys
    

    Функция будет активна после следующей загрузки.

    В Windows Vista и более поздних версиях Windows можно также активировать и отключить ведение журнала IRP без перезагрузки компьютера, добавив в команду параметр /volatile . Пример:

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

    Этот параметр вступает в силу немедленно, но теряется при завершении работы или перезагрузке компьютера. Дополнительные сведения см. в разделе Использование переменных параметров.

  • Использование диспетчера проверки драйверов

    1. Запустите диспетчер проверки драйверов. Введите Verifier в окне командной строки.
    2. Выберите Создать пользовательские параметры (для разработчиков кода) и нажмите кнопку Далее.
    3. Выберите Выбрать отдельные параметры из полного списка.
    4. Выберите (проверка) Ведение журнала IRP и проверка ввода-вывода.

DC2WMIParser

DC2WMIParser — это средство, которое собирает записи WMI IRP, созданные средством проверки драйверов, и преобразует этот журнал в текстовый файл.

Синтаксис DC2WMIParser выглядит следующим образом:

dc2wmiparser [/f File] [/t Time]

Их смысл следующий:

Файл /f
Указывает полный путь и имя файла журнала для записи. Относительные пути будут приниматься относительно текущего каталога. Если этот параметр не указан, будет использоваться имя файла dc2verifier.act в текущем каталоге.

Время /t
Указывает продолжительность выполнения DC2WMIParser (в минутах) в минутах. Если время равно нулю, DC2WMIParser запишет все сведения об IRP WMI, которые уже были сохранены средством проверки драйверов, а затем завершит работу. Если задано положительное значение 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