Функция 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 :
- Вызывает подпрограмму CsqAcquireLock очереди, чтобы заблокировать очередь.
- Вызывает подпрограмму CsqInsertIrp очереди для вставки IRP.
- Помечает IRP как ожидающее.
- Вызывает подпрограмму CsqReleaseLock очереди, чтобы разблокировать очередь.
Драйверы также могут использовать IoCsqInsertIrpEx для вставки IRP в очередь. Для очереди, указанной ioCsqInitializeEx, IoCsqInsertIrpEx предоставляет дополнительные возможности. Дополнительные сведения см. в разделе Отмена безопасных очередей IRP.
Обратите внимание, что подпрограммы IoCsqXxx используют элемент DriverContext[3] IRP для хранения сведений о контексте IRP. Драйверы, использующие эти подпрограммы для постановки в очередь IRP, должны оставить этот элемент неиспользуем.
Вызывающие устройства IoCsqInsertIrp должны выполняться в среде IRQL <= DISPATCH_LEVEL. Процедуры обратного вызова драйвера должны правильно работать в этом IRQL.