Функция 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 — это более серьезный код ошибки.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 8. |
Целевая платформа | Универсальное |
Верхняя часть | ntddk.h (включая Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Любой уровень. |