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


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

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

Синтаксис

void IoCsqInsertIrp(
  [in, out]       PIO_CSQ             Csq,
  [in, out]       PIRP                Irp,
  [out, optional] PIO_CSQ_IRP_CONTEXT Context
);

Параметры

[in, out] Csq

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

[in, out] Irp

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

[out, optional] Context

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

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

None

Remarks

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

  1. Вызывает подпрограмму CsqAcquireLock очереди, чтобы заблокировать очередь.
  2. Вызывает подпрограмму CsqInsertIrp очереди для вставки IRP.
  3. Помечает IRP как ожидающее.
  4. Вызывает подпрограмму CsqReleaseLock очереди, чтобы разблокировать очередь.
Если Вставляемая IRP уже отменена, IoCsqInsertIrp не пытается вставить IRP в очередь.

Драйверы также могут использовать IoCsqInsertIrpEx для вставки IRP в очередь. Для очереди, указанной ioCsqInitializeEx, IoCsqInsertIrpEx предоставляет дополнительные возможности. Дополнительные сведения см. в разделе Отмена безопасных очередей IRP.

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

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

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows XP и более поздних версиях Windows. Драйверы, которые также должны работать в 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

IoCsqInsertIrpEx

IoCsqRemoveIrp

IoCsqRemoveNextIrp