Функция IoStartNextPacket (ntifs.h)
Подпрограмма IoStartNextPacket извлекает следующий IRP из очереди устройств, связанной с данным объектом устройства, и вызывает подпрограмму StartIo драйвера.
Синтаксис
void IoStartNextPacket(
[in] PDEVICE_OBJECT DeviceObject,
[in] BOOLEAN Cancelable
);
Параметры
[in] DeviceObject
Указатель на объект устройства, для которого должен быть выведен из очереди IRP.
[in] Cancelable
Указывает, можно ли отменить irP в очереди устройств.
Возвращаемое значение
None
Remarks
Если в настоящее время в очереди устройств для целевого Объекта DeviceObject нет irP, эта подпрограмма просто возвращает управление вызывающей объекту.
Если драйвер передал указатель на подпрограмму отмены при вызове IoStartPacket, он должен передать ЗНАЧЕНИЕ TRUE в параметре Отменяемая процедура этой подпрограммы. Если cancelable имеет значение TRUE, диспетчер операций ввода-вывода будет использовать блокировку отмены спина для защиты очереди устройств и текущего IRP.
Драйверы, у которых нет подпрограммы StartIo , не могут вызывать IoStartNextPacket.
Драйверы, которые вызывают IoStartNextPacket из своей подпрограммы StartIo , должны быть осведомлены о проблемах рекурсии. Если драйвер может вызывать IoStartNextPacket для большого количества запросов последовательно из своей подпрограммы StartIo (например, когда происходит ошибка устройства и драйвер очищает очередь устройств), необходимо задать атрибут DeferredStartIo для устройства с помощью процедуры IoSetStartIoAttributes . Этот атрибут гарантирует, что следующий пакет не будет выдан до тех пор, пока не будет возвращен предыдущий вызов StartIo .
Вызывающие устройства IoStartNextPacket должны выполняться в IRQL = DISPATCH_LEVEL. Как правило, эта подпрограмма вызывается из подпрограммы DpcForIsr или CustomDpc драйвера устройства, которые выполняются в IRQL = DISPATCH_LEVEL.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 |
Целевая платформа | Универсальное |
Верхняя часть | ntifs.h (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | DISPATCH_LEVEL (см. раздел "Примечания") |
Правила соответствия DDI | HwStorPortProhibitedDIs(storport), IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm), SpinLockSafe(storport), SpinLockSafe(storport), SpinLockSafe(wdm), StartIoRecursion(wdm) |