функция обратного вызова IO_CSQ_INSERT_IRP_EX (wdm.h)
Подпрограмма CsqInsertIrpEx используется системой для вставки IRP в очередь IRP, реализованную драйвером и безопасную для отмены.
Синтаксис
IO_CSQ_INSERT_IRP_EX IoCsqInsertIrpEx;
NTSTATUS IoCsqInsertIrpEx(
[in] _IO_CSQ *Csq,
[in] PIRP Irp,
[in] PVOID InsertContext
)
{...}
Параметры
[in] Csq
Указатель на структуру IO_CSQ для очереди IRP с безопасной отменой.
[in] Irp
Указатель на IRP для вставки в очередь IRP.
[in] InsertContext
Указатель на определенный драйвером контекст для операции вставки.
Возвращаемое значение
CsqInsertIrpEx возвращает STATUS_SUCCESS, если IRP был успешно вставлен, или соответствующий код ошибки при сбое.
Комментарии
Драйвер задает подпрограмму CsqInsertIrpEx для очереди IRP с безопасной отменой при инициализации структуры IO_CSQ очереди. Драйвер указывает подпрограмму в качестве параметра CsqInsertIrpioCsqInitializeEx при инициализации IO_CSQ. Дополнительные сведения см. в разделе Отмена безопасных очередей IRP.
Подпрограмма IoCsqInsertIrpEx вызывает CsqInsertIrpEx для вставки IRP в очередь. Параметр InsertContextобъекта IoCsqInsertIrpEx передается как параметр InsertContextобъекта CsqInsertIrpEx.
Примеры
Чтобы определить подпрограмму обратного вызова CsqInsertIrpEx , необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки, и это требование для написания драйверов для операционной системы Windows.
Например, чтобы определить подпрограмму обратного вызова CsqInsertIrpEx с именем MyCsqInsertIrpEx
, используйте тип IO_CSQ_INSERT_IRP_EX, как показано в следующем примере кода:
IO_CSQ_INSERT_IRP_EX MyCsqInsertIrpEx;
Затем реализуйте процедуру обратного вызова следующим образом:
_Use_decl_annotations_
NTSTATUS
MyCsqInsertIrpEx(
struct _IO_CSQ *Csq,
PIRP Irp,
PVOID InsertContext
)
{
// Function body
}
Тип функции IO_CSQ_INSERT_IRP_EX определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить заметку _Use_decl_annotations_
в определение функции. Заметка _Use_decl_annotations_
гарантирует, что будут использоваться заметки, которые применяются к типу функции IO_CSQ_INSERT_IRP_EX в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в статье Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_
см. в статье Поведение функции с заметками.
Требования
Требование | Значение |
---|---|
Целевая платформа | Персональный компьютер |
Верхняя часть | wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h) |