Функция 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 :
- Вызывает подпрограмму CsqAcquireLock очереди, чтобы заблокировать очередь.
- Если структура IO_CSQ очереди была инициализирована IoCsqInitialize, IoCsqInsertIrpEx вызывает подпрограмму CsqInsertIrp очереди для вставки IRP. Если структура IO_CSQ очереди была инициализирована IoCsqInitializeEx, IoCsqInsertIrpEx вызывает подпрограмму CsqInsertIrpEx очереди для вставки IRP и передает параметр InsertContext в качестве параметра InsertContextcsqInsertIrpEx.
- Вызывает подпрограмму CsqReleaseLock очереди, чтобы разблокировать очередь.
Дополнительные сведения см. в разделе Отмена безопасных очередей 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) |