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