Функция 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.
Если параметр 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 |
См. также раздел
RxDereferenceAndDeleteRxContext_Real
RxResumeBlockedOperations_Serially