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


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

Подпрограмма IoSetNextIrpStackLocation задает расположение стека IRP в выделенной драйвером IRP в соответствии с расположением вызывающего объекта.

Синтаксис

void IoSetNextIrpStackLocation(
  [in, out] PIRP Irp
);

Параметры

[in, out] Irp

Указатель на IRP, расположение стека которого необходимо задать.

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

None

Remarks

Как правило, эта процедура редко используется водителями. Он в основном используется драйверами, которым требуется собственное расположение стека в IRP, которое они выделили самостоятельно для отправки другому драйверу.

IoSetNextIrpStackLocation обычно не требуется, так как:

  • Драйвер получил IRP, который передается от другого драйвера более высокого уровня, и поэтому ему уже принадлежит расположение стека.
  • Или драйвер выделил IRP, но ему не требуется собственное расположение стека, так как он может хранить все необходимое в блоке контекста, адрес которого можно передать в процедуру IoCompletion .
Следует соблюдать осторожность при вызове этой процедуры, особенно при выделении IRP с помощью IoAllocateIrp или IoMakeAssociatedIrp. Модуль записи выделяющего драйвера должен помнить, что расположение стека для конкретного вызывающего объекта не включается в число расположений стека, необходимых драйверам нижнего уровня, в которые он отправляет IRP с помощью IoCallDriver. Драйвер должен явно указать расположение стека для себя в вызове IoAllocateIrp или IoMakeAssociatedIrp , если он вызывает IoSetNextIrpStackLocation с IRP, возвращаемым любой подпрограммой.

Драйвер не может вызывать IoSetNextIrpStackLocation с любым IRP, который он выделяет, вызвав IoBuildAsynchronousFsdRequest, IoBuildDeviceIoControlRequest или IoBuildSynchronousFsdRequest.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Персональный компьютер
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
IRQL Любой уровень

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

IO_STACK_LOCATION

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoCallDriver

IoSetCompletionRoutine