Самоучитель по программированию систем защиты

       

Диспетчерские точки входа драйвера



Диспетчерские точки входа драйвера

Информация, требуемая для выполнения запроса ввода/вывода, содержится в различных элементах как фиксированной части IRP, так и стека размещения ввода/вывода. Рассмотрим эти элементы. Структура поля Parameters в стеке размещения ввода/ вывода зависит от кода главной и второстепенной функции ввода/вывода. Нас в основном будет интересовать структура поля Parameters для запросов чтения, записи и пользовательских запросов ввода/вывода:

  • 1. IRPJVIJ_READ. Параметры для этого функционального кода содержат следующее:

    1. Parameters.Read.Length (ULONG) содержит размер в байтах буфера инициатора запроса.
    2. Parameters. Read.Key (ULONG) содержит ключевое значение, которое нужно использовать при чтении. Обычно представляет интерес только для драйверов файловой системы.
    3. Parameters .Read.ByteOfFset (LARGE_INTEGER) содержит смещение (обычно в файле), с которого должна начаться операция чтения.
    4. 2. IRP_MJ_WRITE. Параметры для этого функционального кода следующие:

      • Parameters. Write.Length (ULONG) содержит размер в байтах буфера инициатора запроса.
      • Parameters.Write.Key (ULONG) содержит ключевое значение, которое нужно использовать при записи. Обычно представляет интерес только для драйверов файловой системы.
      • Parameters.Write.ByteOffset (LARGE_INTEGER) содержит смещение (обычно в файле) с которого должна начаться операция записи.
      • 3. IRPJMJ_DEVICE_CONTROL. Параметры для этого функционального кода следующие:

        • Parameters.DeviceloControl.OutputBufferLength (ULONG) содержит длину в байтах буфера OutBuffer.
        • Parameters.DeviceloControl.InputBufferLength (ULONG) содержит длину в байтах буфера InBuffer.
        • Parameters. DeviceloControl.ControlCode (ULONG) содержит код управления вводом/выводом, идентифицирующий запрашиваемую функцию управления устройством. Этот управляющий код обычно предварительно определен драйвером с использованием макрокоманды CTL_CODE.
        • Parameters.DeviceloControl.TypeSInputBuffer (PVOID) содержит виртуальный адрес буфера инициатора запроса InBuffer (см. функцию Win32 API DeviceloControl()). Адрес обычно используется только тогда, когда IOCTL использует METHOD_NEITHER.


        • Содержание раздела