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

Подпрограмма CsqCompleteCanceledIrp используется системой, чтобы сообщить драйверу о том, что он может завершить отмененное IRP.

Синтаксис

IO_CSQ_COMPLETE_CANCELED_IRP IoCsqCompleteCanceledIrp;

void IoCsqCompleteCanceledIrp(
  [in] PIO_CSQ Csq,
  [in] PIRP Irp
)
{...}

Параметры

[in] Csq

Указатель на структуру IO_CSQ для очереди IRP с безопасной отменой.

[in] Irp

Указатель на IRP, который требуется отменить.

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

None

Remarks

Драйвер задает подпрограмму CsqCompleteCanceledIrp для очереди IRP с безопасной отменой при инициализации структуры IO_CSQ очереди. Драйвер указывает подпрограмму в качестве параметра CsqCompleteCanceledIrpioCsqInitialize или IoCsqInitializeEx при инициализации IO_CSQ. Дополнительные сведения см. в разделе Отмена безопасных очередей IRP.

Система вызывает эту подпрограмму для завершения отмененного IRP, который был удален из очереди драйвера. Как правило, драйверы просто вызывают IoCompleteRequest для IRP с состоянием STATUS_CANCELLED.

Драйверы не обязаны удалять IRP из очереди, прежде чем завершить ее как отмененную: система всегда вызывает подпрограмму CsqRemoveIrp очереди, чтобы удалить IRP из очереди перед вызовом CsqCompleteCanceledIrp.

Примеры

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

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

IO_CSQ_COMPLETE_CANCELED_IRP MyCsqCompleteCanceledIrp;

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

_Use_decl_annotations_
VOID 
 MyCsqCompleteCanceledIrp(
    _In_ PIO_CSQ  Csq,
    _In_ PIRP  Irp
    )
  {
      // Function body
  }

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

Требования

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

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

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCompleteRequest

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp