функция обратного вызова 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, описывающую запрошенную операцию ввода-вывода.
Возвращаемое значение
Никакой
Замечания
Подпрограмма startIo драйвера выполняется в контексте произвольного потока в IRQL = DISPATCH_LEVEL.
Подпрограмма StartIo необязательна. Подпрограмма StartIo драйвера, если она указана, должна быть названа XxxStartIo, где Xxx является префиксом для конкретного драйвера. Подпрограмма DriverEntry драйвера должна хранить адрес подпрограммы StartIo в DriverObject>DriverStartIo. (Если подпрограмма не указана, этот указатель должен быть null.)
Драйвер может использовать IoSetStartIoAttributes для задания атрибутов при вызове подпрограммы StartIo.
Подробные сведения о реализации подпрограммы драйвера StartIo см. в статье Написание подпрограммы StartIo.
Примеры
Чтобы определить подпрограмму обратного вызова StartIo, необходимо сначала указать объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализ кода для драйверов, статический проверяющий драйвер (SDV) и другие средства проверки подлинности, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова startIo 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 (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Вызывается в DISPATCH_LEVEL. |