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


функция обратного вызова 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)

См. также раздел

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp