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


Функция IoSetMasterIrpStatus (ntddk.h)

Подпрограмма IoSetMasterIrpStatus условно заменяет значение Status в IRP указанным значением NTSTATUS.

Синтаксис

void IoSetMasterIrpStatus(
  [in, out] PIRP     MasterIrp,
  [in]      NTSTATUS Status
);

Параметры

[in, out] MasterIrp

Указатель на master IRP. Дополнительные сведения см. в подразделе "Примечания".

[in] Status

Значение NTSTATUS для сравнения с элементом Statusблока состояния ввода-вывода в master IRP.

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

None

Remarks

Получив IRP, драйвер может создать два или более подчиненных IRP для выполнения работы, запрошенной исходной (или master) IRP. После завершения подчиненных IRP драйвер собирает коды состояния завершения из подчиненных IRP и объединяет их, чтобы сформировать единый код состояния завершения для master IRP.

IoSetMasterIrpStatus реализует единую политику для объединения кодов состояния из нескольких подчиненных IRP в код состояния для master IRP. Например, если master IRP разделена на две подчиненные irp, и одна из этих подчиненных IRP завершается успешно, а другая завершается сбоем, код состояния из неисправной IRP используется в качестве кода состояния для master IRP. Однако если обе подчиненные IRP завершаются сбоем, в качестве состояния для master IRP используется более серьезный код сбоя.

Перед первым вызовом IoSetMasterIrpStatus драйвер задает элемент IoStatus.Status в IRP master значение STATUS_SUCCESS (или STATUS_FT_READ_FROM_COPY, если это ожидается). Затем, по мере завершения каждого подчиненного IRP, драйвер вызывает IoSetMasterIrpStatus, чтобы объединить код состояния из этого IRP с кодом состояния в master IRP. В этом вызове параметр PIRP указывает на master IRP, а параметру Status присваивается значение элемента IoStatus.Status в подчиненном IRP.

Как правило, IoSetMasterIrpStatus заменяет код состояния в PIRP-IoStatus.Status > значением Status в следующих случаях:

  • Значение состояния в **PIRP* — STATUS_SUCCESS, а Status — код ошибки.
  • Значение состояния в **PIRP* является кодом ошибки, но status — это более серьезный код ошибки.
Существует два исключения из общего правила. Значение Состояния STATUS_VERIFY_REQUIRED всегда заменяет значение состояния в **PIRP*. Значение Состояния STATUS_FT_READ_FROM_COPY никогда не заменяет значение состояния в **PIRP*.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 8.
Целевая платформа Универсальное
Верхняя часть ntddk.h (включая Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень.

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

IRP