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


функция обратного вызова 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, который необходимо отменить.

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

Никакой

Замечания

Драйвер задает подпрограмму CsqCompleteCanceledIrp для очереди отмены безопасного IRP при инициализации структуры IO_CSQ очереди. Драйвер задает подпрограмму в качестве параметра CsqCompleteCanceledIrpIoCsqInitialize или IoCsqInitializeEx при инициализации IO_CSQ. Дополнительные сведения см. в Cancel-Safe очередях 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 (include Wdm.h, Ntddk.h, Ntifs.h)

См. также

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCompleteRequest

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp