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

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

Синтаксис

IO_CSQ_PEEK_NEXT_IRP IoCsqPeekNextIrp;

PIRP IoCsqPeekNextIrp(
  [in]           PIO_CSQ Csq,
  [in, optional] PIRP Irp,
  [in, optional] PVOID PeekContext
)
{...}

Параметры

[in] Csq

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

[in, optional] Irp

Указатель на IRP в очереди IRP драйвера или ЗНАЧЕНИЕ NULL для указания начала очереди.

[in, optional] PeekContext

Указатель на определяемые драйвером сведения о контексте. Подпрограмма CsqPeekNextIrp возвращает первое значение IRP, которое следует за Irp и соответствует PeekContext.

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

CsqPeekNextIrp возвращает первый IRP, следующий за IRP в очереди и соответствующий PeekContext, или NULL , если соответствующий IRP отсутствует. Если Irp имеет значение NULL, CsqPeekNextIrp возвращает первый соответствующий IRP в очереди или NULL , если соответствующий IRP отсутствует.

Комментарии

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

Система использует CsqPeekNextIrp для итерации по IRP в очереди IRP драйвера. Например, подпрограмма IoCsqRemoveNextIrp использует эту процедуру для поиска IRP для удаления.

Примеры

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

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

IO_CSQ_PEEK_NEXT_IRP MyCsqPeekNextIrp;

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

_Use_decl_annotations_
PIRP 
 MyCsqPeekNextIrp(
    PIO_CSQ  Csq,
    PIRP  Irp,
    PVOID  PeekContext
    )
  {
      // Function body
  }

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

Требования

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

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

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp