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


функция обратного вызова DRIVER_STARTIO (wdm.h)

Подпрограмма StartIo запускает операцию ввода-вывода, описанную в IRP.

Синтаксис

DRIVER_STARTIO DriverStartio;

void DriverStartio(
  [in, out] _DEVICE_OBJECT *DeviceObject,
  [in, out] _IRP *Irp
)
{...}

Параметры

[in, out] DeviceObject

Указатель на структуру DEVICE_OBJECT , предоставленный вызывающим. Это объект устройства для целевого устройства, ранее созданный подпрограммой AddDevice драйвера.

[in, out] Irp

Предоставленный вызывающим элементом указатель на структуру IRP , описывающую запрошенную операцию ввода-вывода.

Возвращаемое значение

None

Remarks

Подпрограмма StartIo драйвера выполняется в произвольном контексте потока в IRQL = DISPATCH_LEVEL.

Подпрограмма StartIo является необязательной. Подпрограмма StartIo драйвера должна иметь имя XxxStartIo, где Xxx — это префикс, зависящий от драйвера. Подпрограмма DriverEntry драйвера должна хранить адрес подпрограммы StartIo в Файле DriverObject-DriverStartIo>. (Если подпрограмма не указана, этот указатель должен иметь значение NULL.)

Драйвер может использовать атрибуты IoSetStartIoAttributes для задания атрибутов при вызове его подпрограммы StartIo .

Подробные сведения о реализации процедуры StartIo драйвера см. в статье Написание процедуры StartIo.

Примеры

Чтобы определить подпрограмму обратного вызова StartIo , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить подпрограмму обратного вызова StartIo с именем MyStartIo, используйте тип DRIVER_STARTIO, как показано в следующем примере кода:

DRIVER_STARTIO MyStartIo;

Затем реализуйте процедуру обратного вызова следующим образом:

_Use_decl_annotations_
VOID
  MyStartIo(
    struct _DEVICE_OBJECT  *DeviceObject,
    struct _IRP  *Irp 
    )
  {
      // Function body
  }

Тип функции DRIVER_STARTIO определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_ в определение функции. Заметка _Use_decl_annotations_ гарантирует, что будут использоваться заметки, которые применяются к DRIVER_STARTIO типу функции в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_см. в статье Поведение функции с заметками.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL Вызывается на DISPATCH_LEVEL.