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


Функция 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.

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

Никакой

Замечания

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

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

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

  • MajorFunction членом Irp является 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, а тип NET_ROOT является NET_ROOT_PIPE.
Если это вызов рекурсивной файловой системы (член TopLevelIrp в локальном хранилище потока является текущим Irp), то Флаги члена RxContext также имеет следующий набор значений:

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

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

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

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

Требования

Требование Ценность
целевая платформа Настольный
заголовка rxcontx.h (include Rxprocs.h rxcontx.h)
IRQL <= APC_LEVEL

См. также

RX_CONTEXT

RxCompleteRequest

RxCompleteRequest_Real

RxCreateRxContext

RxDereference

RxDereferenceAndDeleteRxContext_Real

RxPrepareContextForReuse

RxResumeBlockedOperations_Serially

__RxSynchronizeBlockingOperations

__RxSynchronizeBlockingOperationsMaybeDroppingFcbLock