Функция IoCsqInsertIrpEx (wdm.h)

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

Синтаксис

NTSTATUS IoCsqInsertIrpEx(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context,
  [in, optional]  PVOID               InsertContext
);

Параметры

[in, out] Csq

Указатель на структуру IO_CSQ для безопасной для отмены очереди IRP драйвера. Эта структура должна быть инициализирована ioCsqInitialize или IoCsqInitializeEx.

[in, out] Irp

Указатель на IRP для постановки в очередь.

[out, optional] Context

Указатель на структуру IO_CSQ_IRP_CONTEXT . IoCsqInsertIrpEx инициализирует эту структуру с помощью контекстных сведений для вставленной IRP. Драйвер передает это значение в IoCsqRemoveIrp , чтобы удалить IRP из очереди. Контекст может иметь значение NULL , если драйвер не будет использовать IoCsqRemoveIrp для удаления этого IRP из очереди.

[in, optional] InsertContext

Указатель на определяемое драйвером значение контекста. Этот параметр передается в подпрограмму Драйвера CsqInsertIrpEx , если он имеется. В противном случае этот параметр игнорируется.

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

Если параметр Csq был инициализирован с помощью IoCsqInitialize, IoCsqInsertIrpEx всегда возвращает STATUS_SUCCESS. Если csq был инициализирован с помощью IoCsqInitializeEx, IoCsqInsertIrpEx возвращает значение, возвращенное подпрограммой CsqInsertIrpEx драйвера.

Комментарии

IoCsqInsertIrpEx использует подпрограммы диспетчеризации очереди для вставки IRP. Подпрограмма IoCsqInsertIrpEx :

  1. Вызывает подпрограмму CsqAcquireLock очереди, чтобы заблокировать очередь.
  2. Если структура IO_CSQ очереди была инициализирована IoCsqInitialize, IoCsqInsertIrpEx вызывает подпрограмму CsqInsertIrp очереди для вставки IRP. Если структура IO_CSQ очереди была инициализирована IoCsqInitializeEx, IoCsqInsertIrpEx вызывает подпрограмму CsqInsertIrpEx очереди для вставки IRP и передает параметр InsertContext в качестве параметра InsertContextcsqInsertIrpEx.
  3. Вызывает подпрограмму CsqReleaseLock очереди, чтобы разблокировать очередь.
Если Вставляемая IRP уже отменена, IoCsqInsertIrpEx не пытается вставить IRP в очередь.

Дополнительные сведения см. в разделе Отмена безопасных очередей IRP.

Обратите внимание, что подпрограммы IoCsqXxx используют элемент DriverContext[3] IRP для хранения сведений о контексте IRP. Драйверы, использующие эти подпрограммы для постановки в очередь IRP, должны оставить этот элемент неиспользуем.

Вызывающие экземпляры IoCsqInsertIrpEx должны выполняться в среде IRQL <= DISPATCH_LEVEL. Процедуры обратного вызова драйвера должны правильно работать в этом IRQL.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Server 2003 и более поздних версиях операционной системы Windows. Подпрограмма также доступна в библиотеке Csq.lib, которая поставляется вместе с комплектом драйверов Windows (WDK) и пакетом средств разработки драйверов (DDK) для Windows Server 2003. Драйверы, которые также должны работать в Windows XP, Windows 2000 и Windows 98/Me, могут вместо этого ссылаться на Csq.lib, чтобы использовать подпрограмму.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (см. раздел "Примечания")
Правила соответствия DDI IoAllocateFree(wdm), IoReuseIrp(wdm), IrpCancelField(wdm), RemoveLockCheck(wdm), RemoveLockForward(wdm), RemoveLockForward2(wdm), RemoveLockForwardDeviceControl(wdm), RemoveLockForwardDeviceControl2(wdm), RemoveLockForwardDeviceControlInternal(wdm), RemoveLockForwardDeviceControlInternal2(wdm), RemoveLockForwardRead(wdm), RemoveLockForwardRead2(wdm) , RemoveLockForwardWrite(wdm), RemoveLockForwardWrite2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

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

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IO_CSQ_IRP_CONTEXT

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqRemoveIrp

IoCsqRemoveNextIrp