Функция RxInitializeContext (rxcontx.h)

RxInitializeContext инициализирует существующую структуру данных RX_CONTEXT.

Синтаксис

void RxInitializeContext(
  [in, optional] IN PIRP                 Irp,
  [in]           IN PRDBSS_DEVICE_OBJECT RxDeviceObject,
  [in]           IN ULONG                InitialContextFlags,
  [in, out]      IN OUT PRX_CONTEXT      RxContext
);

Параметры

[in, optional] Irp

Указатель на IRP, инкапсулированный этой структурой RX_CONTEXT.

[in] RxDeviceObject

Указатель на объект устройства, к которому применяется этот RX_CONTEXT и IRP.

[in] InitialContextFlags

Набор начальных значений элемента Flags RX_CONTEXT структуры данных, которые будут храниться в структуре RX_CONTEXT. Эти начальные значения могут быть любым сочетанием следующих перечислений:

RX_CONTEXT_FLAG_WAIT

Если это значение задано, IRP не следует отправлять для последующего выполнения процессом файловой системы, а ожидать завершения.

RX_CONTEXT_FLAG_MUST_SUCCEED

Если это значение задано, операция должна завершиться успешно. Это значение в настоящее время не используется RDBSS, но оно может использоваться драйверами мини-перенаправления сети.

RX_CONTEXT_FLAG_MUST_SUCCEED_NONBLOCKING

Если задано это значение, операция должна быть успешной для неблокирующих операций. Это значение в настоящее время не используется RDBSS, но оно может использоваться драйверами мини-перенаправления сети.

[in, out] RxContext

Указатель на инициализируемый RX_CONTEXT.

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

None

Remarks

RxInitializeContext вызывается внутри подпрограммы RxCreateRxContext . Поэтому подпрограмма RxInitializeContext обычно используется только драйверами перенаправления сети, которые выделяют RX_CONTEXT структуры напрямую вместо вызова подпрограммы RxCreateRxContext для выделения и инициализации структуры RX_CONTEXT.

Если параметр Irp настроен для асинхронной операции, то член Flags структуры RX_CONTEXT, на которую указывает RxContext, также имеет следующее значение:

RX_CONTEXT_FLAG_ASYNC_OPERATION также устанавливается для следующих условий:

  • Элемент MajorFunctionIrp — это IRP_MJ_READ, IRP_MJ_WRITE или IRP_MJ_DEVICE_CONTROL.
  • Элемент MajorFunctionIrp является IRP_MJ_DIRECTORY_CONTROL, а член MinorFunctionIRP — IRP_MN_NOTIFY_CHANGE_DIRECTORY.
  • Элемент MajorFunctionIrp является IRP_MJ_FILE_SYSTEM_CONTROL, а элемент NetRoot связанного FCB не равен NULL , а элемент Type NET_ROOT NET_ROOT_PIPE.
Если это рекурсивный вызов файловой системы (элемент TopLevelIrp в локальном хранилище потока является текущим IRP), то элемент FlagsrxContext также имеет следующее значение:

Если параметр RxDeviceObject указывает, что это объект устройства RDBSS верхнего уровня, то элемент Flags структуры RX_CONTEXT также имеет следующее значение:

Если для элемента флагов Irp FileObject задан параметр FO_WRITE_THROUGH, то для элемента Flags структуры RX_CONTEXT также задано следующее значение:

RxInitializeContext задает ряд других элементов в структуре RX_CONTEXT, включая следующие:

  • Устанавливает правильные значения NodeTypeCode, NodeByteSize, SerialNumber, RxDeviceObject и инициализирует ReferenceCount равным 1.
  • Инициализирует SyncEvent.
  • Инициализация связанного ScavengerEntry
  • Инициализирует запись списка BlockedOperations.
  • Задает элементы RX_CONTEXT на основе IRP. К ним относятся элементы CurrentIrp, OriginalThread, MajorFunction, MinorFunction, CurrentIrpSp, pFcb, NonPagedFcb, pFobx, pRelevantSrvOpen и FobxSerialNumber .

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть rxcontx.h (включая Rxprocs.h rxcontx.h)
IRQL <= APC_LEVEL

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

RX_CONTEXT

RxCompleteRequest

RxCompleteRequest_Real

RxCreateRxContext

RxDereference

RxDereferenceAndDeleteRxContext_Real

RxPrepareContextForReuse

RxResumeBlockedOperations_Serially

__RxSynchronizeBlockingOperations

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock