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


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

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

Синтаксис

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

Параметры

[in, out] MasterIrp

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

[in] Status

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

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

Никакой

Замечания

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

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.
целевая платформа Всеобщий
заголовка ntddk.h (include Ntddk.h, Ntifs.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень.

См. также

IRP