Функция IoStartNextPacket (wdm.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 . Если cancelable имеет значение TRUE, диспетчер операций ввода-вывода будет использовать блокировку отмены спина для защиты очереди устройств и текущего IRP.

Драйверы, у которых нет подпрограммы StartIo , не могут вызывать IoStartNextPacket.

Драйверы, которые вызывают IoStartNextPacket из своей подпрограммы StartIo , должны быть осведомлены о проблемах рекурсии. Если драйвер может вызывать IoStartNextPacket для большого количества запросов последовательно из своей подпрограммы StartIo (например, когда происходит ошибка устройства и драйвер очищает очередь устройств), необходимо задать атрибут DeferredStartIo для устройства с помощью процедуры IoSetStartIoAttributes . Этот атрибут гарантирует, что следующий пакет не будет выдан до тех пор, пока не будет возвращен предыдущий вызов StartIo .

Вызывающие устройства IoStartNextPacket должны выполняться в IRQL = DISPATCH_LEVEL. Как правило, эта подпрограмма вызывается из подпрограммы DpcForIsr или CustomDpc драйвера устройства, которые выполняются в IRQL = DISPATCH_LEVEL.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.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)

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

DEVICE_OBJECT

IoSetStartIoAttributes

IoStartNextPacketByKey

IoStartPacket