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


Инвариантная проверка MDL для стека

Параметр Invariant MDL Checking for Stack (Инвариантная проверка MDL для стека) отслеживает, как драйвер обрабатывает инвариантные буферы MDL в стеке драйверов. Средство проверки драйверов может обнаруживать незаконное изменение инвариантных буферов MDL. Чтобы использовать этот параметр, проверка ввода-вывода должна быть включена по крайней мере в одном драйвере.

Примечание Этот параметр доступен, начиная с Windows 8.

Параметр Invariant MDL Checking for Stack гарантирует, что драйверы следуют правилам для инвариантных буферов MDL только в тот момент, когда запрос покидает стек драйверов.

При первом просмотре IRP с инвариантным MDL в подпрограмме IoCallDriver уникальная сигнатура вычисляется из содержимого инвариантного буфера MDL и хранится во внутренней базе данных. Во время выполнения IRP в подпрограмме IoCompleteRequest , если IRP по-прежнему содержит инвариантный MDL, для которого мы записали сигнатуру, средство проверки драйверов проверяет, не изменился ли буфер.

Инвариантный буфер для запроса на запись не может быть изменен в течение всего времени существования IRP. Для запроса на чтение инвариантный буфер нельзя изменить по пути диспетчеризации, поэтому сравнение сигнатуры буфера выполняется при последнем вызове IoCallDriver.

Параметр Invariant MDL Checking for Stack (Инвариантная проверка MDL для стека) проверяет инвариантность буфера MDL во всем стеке драйверов без учета того, что происходит с буфером при его прохождении через отдельные драйверы в стеке. Этот параметр является глобальным и не может применяться выборочно для каждого драйвера. Параметр Invariant MDL Checking for Stack (Инвариантная проверка MDL для стека) может только перехватывать нарушение, не имея возможности определить драйвер, нарушивший инвариантность буфера. Чтобы определить неисправный драйвер, используйте параметр Инвариантная проверка MDL для драйвера , который проверяет неизменность содержимого буфера при каждом вызове IoCallDriver и IoCompleteRequest DDIs.

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

Функцию инвариантной проверки MDL для стека можно активировать для одного или нескольких драйверов с помощью диспетчера проверки драйверов или командной строки Verifier.exe. Необходимо перезагрузить компьютер, чтобы активировать или отключить параметр Инвариантная проверка MDL для стека. Дополнительные сведения см. в разделе Выбор параметров средства проверки драйверов.

Чтобы активировать параметр Инвариантная проверка MDL для стека, необходимо также активировать проверку ввода-вывода.

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

    В командной строке инвариантная проверка MDL для стека представлена 0x00002000 (бит 13). Чтобы активировать инвариантную проверку MDL для стека, используйте значение флага 0x00002010 или добавьте 0x00002010 к значению флага. Это значение активирует проверку ввода-вывода (0x10) и инвариантную проверку MDL для стека (0x00002000). Пример:

    verifier /flags 0x00002010 /driver MyDriver.sys
    

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

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

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