Поделиться через


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

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

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

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

Запись WMI

Запись WMI не будет включать более 20 IRP для каждого устройства. После записи двадцать первого 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. Запустите диспетчер проверки драйверов. В окне командной строки введите средство проверки .
    2. Выберите " Создать настраиваемые параметры" (для разработчиков кода) и нажмите кнопку "Далее".
    3. Выберите отдельные параметры из полного списка.
    4. Выберите (проверьте) ведение журнала IRP и проверку ввода-вывода.

DC2WMIParser

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

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

dc2wmiparser [/f File] [/t Time]

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

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

/tTime
Указывает продолжительность выполнения dc2WMIParser в минутах. Если время равно нулю, DC2WMIParser запишет все сведения WMI IRP, которые уже сохранены проверяющим драйвером, а затем выйти. Если задано положительное значение, DC2WMIParser продолжит выполняться в течение указанного периода времени, сохраняя новые сведения по мере поступления. По умолчанию используется значение 0.

Формат файлов журнала DC2WMIParser

Файл, созданный DC2WMIParser, является текстовым файлом ASCII.

Первая строка этого файла содержит десятичное число, представляющее количество устройств, вошедшего в файл.

После первой строки файл делится на разделы; в каждом разделе описывается одно устройство.

Для каждого устройства используется следующий формат:

  • В одной строке: имя устройства.

  • В одной строке: десятичное число, указывающее количество типов устройств и функций, предназначенных для этого устройства.

  • В одной строке для каждого типа устройства и функции: три шестнадцатеричных числа, разделенные запятыми. Они представляют тип устройства, а также самые низкие и самые высокие функции, записанные в этой записи.

  • В одной группе строк для каждого типа устройства и функции:

    • Одна строка с десятичным числом, указывающая количество операций ввода-вывода для текущего типа устройства.
    • Одна строка для каждого 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