RX_CONTEXT结构(rxcontx.h)
RX_CONTEXT 结构封装 IRP,供 RDBSS、网络微型重定向器和文件系统使用。 它描述一个 IRP,而该 IRP 正在由网络微型重定向程序进行处理,并包含允许在 IRP 完成后释放全局资源的状态信息。
语法
typedef struct _RX_CONTEXT {
NODE_TYPE_CODE NodeTypeCode;
NODE_BYTE_SIZE NodeByteSize;
__volatile ULONG ReferenceCount;
LIST_ENTRY ContextListEntry;
UCHAR MajorFunction;
UCHAR MinorFunction;
BOOLEAN PendingReturned;
BOOLEAN PostRequest;
PDEVICE_OBJECT RealDevice;
PIRP CurrentIrp;
PIO_STACK_LOCATION CurrentIrpSp;
PMRX_FCB pFcb;
PMRX_FOBX pFobx;
PMRX_SRV_OPEN pRelevantSrvOpen;
PNON_PAGED_FCB NonPagedFcb;
PRDBSS_DEVICE_OBJECT RxDeviceObject;
PETHREAD OriginalThread;
PETHREAD LastExecutionThread;
__volatile PVOID LockManagerContext;
PVOID RdbssDbgExtension;
RX_SCAVENGER_ENTRY ScavengerEntry;
ULONG SerialNumber;
ULONG FobxSerialNumber;
ULONG Flags;
BOOLEAN FcbResourceAcquired;
BOOLEAN FcbPagingIoResourceAcquired;
UCHAR MustSucceedDescriptorNumber;
union {
struct {
union {
NTSTATUS StoredStatus;
PVOID StoredStatusAlignment;
};
ULONG_PTR InformationToReturn;
};
IO_STATUS_BLOCK IoStatusBlock;
};
union {
ULONGLONG ForceLonglongAligmentDummyField;
PVOID MRxContext[MRX_CONTEXT_FIELD_COUNT];
};
PVOID WriteOnlyOpenRetryContext;
PMRX_CALLDOWN MRxCancelRoutine;
PRX_DISPATCH ResumeRoutine;
RX_WORK_QUEUE_ITEM WorkQueueItem;
LIST_ENTRY OverflowListEntry;
KEVENT SyncEvent;
LIST_ENTRY BlockedOperations;
PFAST_MUTEX BlockedOpsMutex;
LIST_ENTRY RxContextSerializationQLinks;
union {
struct {
union {
FS_INFORMATION_CLASS FsInformationClass;
FILE_INFORMATION_CLASS FileInformationClass;
};
PVOID Buffer;
union {
LONG Length;
LONG LengthRemaining;
};
BOOLEAN ReplaceIfExists;
BOOLEAN AdvanceOnly;
} Info;
struct {
UNICODE_STRING SuppliedPathName;
NET_ROOT_TYPE NetRootType;
PIO_SECURITY_CONTEXT pSecurityContext;
} PrefixClaim;
};
union {
struct {
NT_CREATE_PARAMETERS NtCreateParameters;
ULONG ReturnedCreateInformation;
PWCH CanonicalNameBuffer;
PRX_PREFIX_ENTRY NetNamePrefixEntry;
PMRX_SRV_CALL pSrvCall;
PMRX_NET_ROOT pNetRoot;
PMRX_V_NET_ROOT pVNetRoot;
PVOID EaBuffer;
ULONG EaLength;
ULONG SdLength;
ULONG PipeType;
ULONG PipeReadMode;
ULONG PipeCompletionMode;
USHORT Flags;
NET_ROOT_TYPE Type;
UCHAR RdrFlags;
BOOLEAN FcbAcquired;
BOOLEAN TryForScavengingOnSharingViolation;
BOOLEAN ScavengingAlreadyTried;
BOOLEAN ThisIsATreeConnectOpen;
BOOLEAN TreeConnectOpenDeferred;
UNICODE_STRING TransportName;
UNICODE_STRING UserName;
UNICODE_STRING Password;
UNICODE_STRING UserDomainName;
} Create;
struct {
ULONG FileIndex;
BOOLEAN RestartScan;
BOOLEAN ReturnSingleEntry;
BOOLEAN IndexSpecified;
BOOLEAN InitialQuery;
} QueryDirectory;
struct {
PMRX_V_NET_ROOT pVNetRoot;
} NotifyChangeDirectory;
struct {
PUCHAR UserEaList;
ULONG UserEaListLength;
ULONG UserEaIndex;
BOOLEAN RestartScan;
BOOLEAN ReturnSingleEntry;
BOOLEAN IndexSpecified;
} QueryEa;
struct {
SECURITY_INFORMATION SecurityInformation;
ULONG Length;
} QuerySecurity;
struct {
SECURITY_INFORMATION SecurityInformation;
PSECURITY_DESCRIPTOR SecurityDescriptor;
} SetSecurity;
struct {
ULONG Length;
PSID StartSid;
PFILE_GET_QUOTA_INFORMATION SidList;
ULONG SidListLength;
BOOLEAN RestartScan;
BOOLEAN ReturnSingleEntry;
BOOLEAN IndexSpecified;
} QueryQuota;
struct {
ULONG Length;
} SetQuota;
struct {
PV_NET_ROOT VNetRoot;
PSRV_CALL SrvCall;
PNET_ROOT NetRoot;
} DosVolumeFunction;
struct {
ULONG FlagsForLowIo;
LOWIO_CONTEXT LowIoContext;
};
};
PWCH AlsoCanonicalNameBuffer;
PUNICODE_STRING LoudCompletionString;
__volatile LONG AcquireReleaseFcbTrackerX;
__volatile ULONG TrackerHistoryPointer;
RX_FCBTRACKER_CALLINFO TrackerHistory[RDBSS_TRACKER_HISTORY_SIZE];
ULONG ShadowCritOwner;
} RX_CONTEXT, *PRX_CONTEXT;
成员
NodeTypeCode
用于 RX_CONTEXT 结构的唯一节点类型。 在 RxInitializeContext中初始化 RX_CONTEXT 时,RDBSS 将此成员设置为 RDBSS_NTC_RX_CONTEXT。 如果网络微型重定向程序驱动程序使用其他方法初始化 RX_CONTEXT 结构,则必须设置此成员。
RDBSS 将此成员定义为 RDBSS 使用的所有结构的标准标头的一部分。
RDBSS 使用的所有主要结构类型都具有在 nodetype.h 中定义的唯一双字节节点类型代码,可用于调试。 这些主要结构类型包括:
NodeByteSize
此结构的大小(以字节为单位)。 在 RxInitializeContext 例程中初始化RX_CONTEXT时,RDBSS 将此成员设置为 sizeof(RX_CONTEXT)。 如果网络微型重定向程序驱动程序使用其他方法初始化RX_CONTEXT结构,则必须设置此成员。
RDBSS 将此成员定义为 RDBSS 使用的所有结构的标准标头的一部分。
ReferenceCount
分配此结构的引用计数。 在 RxInitializeContext 例程中分配和初始化RX_CONTEXT时,RDBSS 将此成员设置为 1。 如果网络微型重定向程序驱动程序使用其他方法初始化RX_CONTEXT结构,则必须设置此成员。
RDBSS 将此成员定义为 RDBSS 使用的所有结构的标准标头的一部分。
ContextListEntry
要将此RX_CONTEXT连接到活动RX_CONTEXTS列表的列表项。
MajorFunction
此RX_CONTEXT封装的 IRP 的主要函数。
MinorFunction
此RX_CONTEXT封装的 IRP 的次要函数。
PendingReturned
如果设置为 TRUE,则指定 RDBSS 或驱动程序已标记 IRP 挂起。 每个 IoCompletion 例程都应检查此标志的值。 如果标志为 TRUE,并且如果 IoCompletion 例程不会返回STATUS_MORE_PROCESSING_REQUIRED,则例程应调用 IoMarkIrpPending,将挂起状态传播到设备堆栈中的驱动程序上方。 此成员类似于 IRP 中的同一字段。
在调用网络微型重定向程序驱动程序之前,RDBSS 始终将此成员设置为 TRUE。
PostRequest
如果设置为 TRUE,则表示是否将关联的请求发布到 RDBSS 工作线程。 网络微型重定向程序可以将此成员设置为 TRUE,以指示它想要将此请求发布到文件系统进程(FSP)。
RealDevice
指向目标网络微型重定向程序驱动程序的设备对象的指针。 在 RxInitializeContext 例程中分配RX_CONTEXT时,RDBSS 将此成员设置为网络微型重定向程序驱动程序的设备对象。 此成员从 FileObject->DeviceObject 成员从 IRP 堆栈复制。 网络微型重定向程序的设备对象也存储在 RxDeviceObject 结构成员中。
RealDevice 成员当前未由 RDBSS 使用,但可由网络微型重定向程序使用。
CurrentIrp
指向原始 IRP 的指针。 网络微型重定向程序驱动程序不应使用此成员。
CurrentIrpSp
指向 IRP 堆栈位置的指针。
pFcb
指向此 IRP 的关联文件控制块(FCB)的指针。
pFobx
指向此 IRP 的关联文件对象扩展名(FOBX)的指针。
pRelevantSrvOpen
指向此 IRP 的关联服务器 open(SRV_OPEN)的指针。
NonPagedFcb
指向此 IRP 的关联非分页文件控制块(FCB)的指针。
RxDeviceObject
指向辅助角色队列算法所需的目标网络微型重定向程序驱动程序的RDBSS_DEVICE_OBJECT的指针。 RDBSS 在 RxInitializeContext 例程中初始化RX_CONTEXT时,将此成员设置为网络微型重定向器的RDBSS_DEVICE_OBJECT。 RxDeviceObject 结构包括 DeviceObject 成员,该成员包含网络微型重定向程序驱动程序的设备对象,该对象与RX_CONTEXT的 RealDevice 成员相同。
OriginalThread
指向在其中启动请求的原始线程的指针。
LastExecutionThread
指向最后一个线程的指针,其中一些与RX_CONTEXT关联的处理是在线程发布到文件系统进程时完成的。
LockManagerContext
指向锁管理器上下文的指针。 此成员保留供内部使用。
RdbssDbgExtension
指向提供给 RDBSS 的上下文的指针,用于调试信息。 此成员保留供内部使用。
ScavengerEntry
指向要清理的项列表的指针。 此成员保留供内部使用。
SerialNumber
此RX_CONTEXT结构的序列号。 RDBSS 初始化的每个结构都分配了一个序列号,该序列号是在首次初始化结构时分配的。 此序列号是一个数字,该值在设置值之前递增一个。 RDBSS 在 RxInitializeContext 例程中初始化RX_CONTEXT时设置此成员。 RDBSS
FobxSerialNumber
关联的 FOBX 结构的序列号。 RDBSS 初始化的每个结构都分配了一个序列号,该序列号是在首次初始化结构时分配的。 网络微型重定向程序可以使用此成员来查看多个调用是否属于同一个更大的操作,因此更易于缓存。
Flags
此
FcbResourceAcquired
如果设置为 TRUE,则此成员指定已为此操作获取 FCB 资源。 FCB 资源是与 FCB 上的操作关联的锁定机制之一。
FcbPagingIoResourceAcquired
如果设置为 TRUE,则此成员指定已为此操作获取 FCB 分页 I/O 资源。 FCB 分页 I/O 资源是与 FCB 上的分页 I/O 操作关联的锁定机制之一。
MustSucceedDescriptorNumber
一个成员最初在 RxCreateRxContext 例程中设置为零。 此成员不由 RDBSS 使用,但可由网络微型重定向程序使用。
StoredStatus
用于通过网络微型重定向程序驱动程序返回状态信息的未命名联合的成员,用于低 I/O 操作。 RDBSS 还基于 RDBSS 无法理解文件查询操作时 MRxQueryFileInfo 例程返回的状态设置此值。
StoredStatusAlignment
未命名的联合的成员,用于强制 StoredStatus 成员进行正确的对齐。
InformationToReturn
用于为某些低 I/O(读取、写入、FSCTL 等)的网络微型重定向程序驱动程序返回状态信息的未命名联合的成员,MrxQueryXXX 操作。
用于RX_CONTEXT结构的唯一节点类型。 RDBSS 使用的所有主要结构类型(RX_CONTEXT、SRV_CALL、NET_ROOT、V_NET_ROOT、SRV_OPEN、FCB 和 FOBX)都具有在 nodetype.h 中定义的唯一双字节节点类型代码,该文件可用于调试。 RDBSS 在 RxInitializeContext 例程中初始化RX_CONTEXT时,将此成员设置为RDBSS_NTC_RX_CONTEXT。 如果网络微型重定向程序驱动程序使用其他方法初始化RX_CONTEXT结构,则必须设置此成员。
RDBSS 将此成员定义为 RDBSS 使用的所有结构的标准标头的一部分。
IoStatusBlock
网络微型重定向程序使用 I/O 状态块返回状态信息。 IoStatusBlock 成员是用于返回状态信息的未命名联合的成员。
ForceLonglongAligmentDummyField
未命名的联合的成员,用于强制 MRxContext[MRX_CONTEXT_FIELD_COUNT] 成员进行正确的对齐。
MRxContext[MRX_CONTEXT_FIELD_COUNT]
WriteOnlyOpenRetryContext
一个指针,可用于存储网络微型重定向程序的某些状态。 RDBSS 不使用此成员,但网络微型重定向程序驱动程序可以使用该成员来指示文件缓存在仅写句柄上。
MRxCancelRoutine
指向可由网络微型重定向程序驱动程序设置的取消例程的指针。
ResumeRoutine
此成员保留供内部使用。
WorkQueueItem
指向可在处理RX_CONTEXT时由网络微型重定向程序驱动程序使用的工作队列项的指针。
OverflowListEntry
指向将在完成时释放的操作的列表头的指针。 此成员保留供内部使用。
SyncEvent
指向内核事件的指针,该事件可由网络微型重定向程序驱动程序在处理RX_CONTEXT时等待。
BlockedOperations
指向在完成时要释放的受阻操作的列表头的指针。 此成员保留供内部使用。
BlockedOpsMutex
指向控制被阻止操作序列化的互斥体的指针。 此成员保留供内部使用。
RxContextSerializationQLinks
指向用于按文件对象序列化管道操作的列表项的指针。 此成员保留供内部使用。
Info
用于以下例程的未命名联合的结构成员:
- MRxQueryDirectory
- MRxQueryFileInfo
- MRxQueryVolumeInfo
- MRxSetFileInfo
- MRxSetFileInfoAtCleanup
- MRxSetVolumeInfo
RDBSS 将 信息 结构成员中的信息传递给网络微型重定向程序,而网络微型重定向程序会将信息返回到 Info 结构成员中的 RDBSS。
Info.FsInformationClass
RDBSS 用来传递请求到网络微型重定向程序驱动程序的FS_INFORMATION_CLASS类型的未命名联合的成员。 RDBSS 在调用 MrxQueryVolumeInfo 时,在 FsInformationClass 成员中传递信息,MrxSetVolumeInfo。
Info.FileInformationClass
RDBSS 用来指示发送到网络微型重定向程序驱动程序的FILE_INFORMATION_CLASS请求类型的非命名联合的成员。 RDBSS 在调用 MrxQueryDirectory、MrxQueryFileInfo时,在 fileInformationClass 成员中传递信息,MrxSetFileInfo。
Info.Buffer
用于将数据从 RDBSS 传递到网络微型重定向程序驱动程序的缓冲区,并通过 RDBSS 从网络微型重定向程序驱动程序接收响应。
Info.Length
用于将 Buffer 成员的长度从 RDBSS 传递到网络微型重定向程序驱动程序的未命名联合的成员。 Length 成员用于 MrxQueryDirectory、MrxQueryFileInfo、MrxQueryVolumeInfo、MrxSetFileInfo、MRxSetFileInfoAtCleanup和 MrxSetVolumeInfo 例程。
Info.LengthRemaining
未命名联合的成员,用于将 Buffer 中返回的信息长度从网络微型重定向程序驱动程序传递到 RDBSS 成员。
Info.ReplaceIfExists
一个布尔值,该值指示是否应在重命名操作期间替换现有文件。 MrxSetFileInfo 例程中使用 ReplaceIfExists 成员。
Info.AdvanceOnly
此成员保留供内部使用。
PrefixClaim
用于从多个 UNC 提供程序(MUP)发送的前缀解析请求的未命名联合的结构成员。 前缀声明从 MUP 到 RDBSS 的 IRP_MJ_DEVICE_CONTROL 请求导致 IOCTL_REDIR_QUERY_PATH 或 IOCTL_REDIR_QUERY_PATH_EX。 RDBSS 将 PrefixClaim 结构中的信息传递给网络微型重定向程序,而网络微型重定向程序会将信息返回到 PrefixClaim 结构中的 RDBSS。
PrefixClaim.SuppliedPathName
一个非 NULL 终止的 Unicode 字符串,用于指定要对其执行前缀解析的 UNC 路径。
PrefixClaim.NetRootType
所请求NET_ROOT的类型。 此成员当前未使用。 RDBSS 从 SuppliedPathName 成员推断NET_ROOT的类型。
PrefixClaim.pSecurityContext
指向从 MUP 请求传入的安全上下文的指针。
此成员当前未使用。 安全上下文在 RX_CONTEXT 的 Create.NtCreateParameters.SecurityContext 成员中传递,而不是在此成员中。
Create
用于处理 IRP_MJ_CREATE 请求的未命名联合的结构成员。 此成员用于处理导致调用 MRxCreate 例程的文件打开请求。 此成员还用于前缀解析请求。 RDBSS 将 创建 结构成员中的信息传递给网络微型重定向程序,而网络微型重定向程序会将信息返回到 Create 结构成员中的 RDBSS。
Create.NtCreateParameters
传递给用户模式的创建参数 NtCreatefile 例程。 RDBSS 基于 IRP 的 Parameters.Create 成员设置 NtCreateParameters 结构的成员。
Create.ReturnedCreateInformation
完成 MRxCreate 调用时由网络微型重定向程序设置的值。
Create.CanonicalNameBuffer
指向 Unicode 字符串的指针,表示如果规范名称大于可用缓冲区,则表示要打开的物理文件的名称。
Create.NetNamePrefixEntry
指向 NetName 表前缀条目的指针。 此成员保留供内部使用。
Create.pSrvCall
指向关联SRV_CALL结构的指针。
Create.pNetRoot
指向关联NET_ROOT结构的指针。
Create.pVNetRoot
指向关联V_NET_ROOT结构的指针。
Create.EaBuffer
指向扩展属性缓冲区的指针。 此成员是可选的。
Create.EaLength
扩展属性缓冲区的长度,EaBuffer。
Create.SdLength
安全描述符的长度。 RDBSS 基于 Parameters.Create.SecurityContext IRP 成员的值来设置此值。 如果 SdLength 成员为非零,则安全描述符将 Info.Buffer 成员传递到网络微型重定向程序。
Create.PipeType
管道的类型。 此成员保留供内部使用。
Create.PipeReadMode
管道的读取模式。 此成员保留供内部使用。
Create.PipeCompletionMode
管道的完成模式。 此成员保留供内部使用。
Create.Flags
创建标志
Create.Type
关联的NET_ROOT结构的类型。
Create.RdrFlags
Create.FcbAcquired
此成员保留供内部使用。
Create.TryForScavengingOnSharingViolation
此成员保留供内部使用。
Create.ScavengingAlreadyTried
此成员保留供内部使用。
Create.ThisIsATreeConnectOpen
一个布尔值,该值指示此调用是否为树连接打开请求,并在 IrpSp->Parameters.Create.Options 成员中设置FILE_CREATE_TREE_CONNECTION选项。
Create.TreeConnectOpenDeferred
指示网络微型重定向程序可以选择延迟树连接打开请求的布尔值。
Create.TransportName
表示传输名称的 Unicode 字符串。 从树连接打开的参数中设置此成员。
Create.UserName
一个 Unicode 字符串,表示负责请求的用户名。 从树连接打开的参数中设置此成员。
Create.Password
一个 Unicode 字符串,其中包含用于身份验证和授权的此 UserName 的密码。 从树连接打开的参数中设置此成员。
Create.UserDomainName
一个 Unicode 字符串,其中包含此 UserName的域名。
QueryDirectory
用于处理 IRP_MJ_DIRECTORY_CONTROL 请求的未命名联合的结构成员。 此成员用于处理导致调用 MrxQueryDirectory 例程的查询目录请求。 RDBSS 将 QueryDirectory 结构成员中的信息传递给网络微型重定向程序。
QueryDirectory.FileIndex
如果 IndexSpecified 成员设置为 TRUE,则开始扫描目录的条目的索引。 此参数设置为 IrpSp->Parameters.QueryDirectory.FileIndex 成员。
QueryDirectory.RestartScan
设置为 TRUE 时,布尔值指示扫描从目录中的第一个条目开始。 如果此值设置为 FALSE,扫描将从上一次调用恢复。 首次调用时,此参数必须设置为 TRUE。 如果 IrpSp->标志 具有SL_RESTART_SCAN位,则此参数设置为 TRUE。
QueryDirectory.ReturnSingleEntry
设置为 TRUE 的布尔值指示只应返回单个条目。 如果此参数为 TRUE,MrxQueryDirectory 应仅返回找到的第一个条目。 如果 IrpSp->标志 具有SL_RETURN_SINGLE_ENTRY位,则此参数设置为 TRUE。
QueryDirectory.IndexSpecified
如果设置为 TRUE,则布尔值指示在索引由 FileIndex 成员提供的目录中的条目处开始扫描。 如果 IrpSp->标志 具有SL_INDEX_SPECIFIED位,则此参数设置为 TRUE。
QueryDirectory.InitialQuery
当查询不是通配符查询时设置为 TRUE 的布尔值(“。“,例如)。 如果关联的 FOBX 的 UnicodeQueryTemplate.Buffer 成员为 NULL,并且 FOBX 的 标志 成员没有FOBX_FLAG_MATCH_ALL位,则此成员设置为 TRUE。 对于通配符查询(“
NotifyChangeDirectory
未命名的联合的结构成员,用于处理具有IRP_MN_NOTIFY_CHANGE_DIRECTORY次要功能的IRP_MJ_DIRECTORY_CONTROL请求。 此成员用于处理导致调用 MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 例程的目录更改请求。 RDBSS 将 NotifyChangeDirectory 结构成员和 pLowIoContext->ParamsFor.NotifyChangeDirectory 结构中的信息传递给网络微型重定向程序。
NotifyChangeDirectory.pVNetRoot
指向与目录关联的V_NET_ROOT结构的指针。 此参数设置为 IrpSp->FileObject->FsContext 成员或 IrpSp->FileObject->FsContext2 成员,具体取决于节点类型。
QueryEa
用于处理 IRP_MJ_QUERY_EA 请求的未命名联合的结构成员。 此成员用于处理扩展属性查询请求,这些请求导致调用 MRxQueryEaInfo 例程。 RDBSS 将 QueryEa 结构成员中的信息传递给网络微型重定向程序。
QueryEa.UserEaList
指向调用方提供的输入缓冲区的指针,其中包含指定要查询的扩展属性的 FILE_GET_EA_INFORMATION 结构。 此参数设置为 IrpSp->Parameters.QueryEa.EaList。
QueryEa.UserEaListLength
UserEaList 成员指向的缓冲区的长度(以字节为单位)。 此参数设置为 IrpSp->Parameters.QueryEa.EaListLength。
QueryEa.UserEaIndex
开始扫描扩展属性列表的条目的索引。 如果未将 IndexSpecified 成员设置为 TRUE 或 QueryEaList 成员指向 nonempty 列表,则应忽略此参数。 此参数设置为 IrpSp->Parameters.QueryEa.EaIndex。
QueryEa.RestartScan
设置为 TRUE 时,布尔值指示查询从第一个扩展属性项开始。 如果此值设置为 FALSE,扫描将从上一次调用恢复。 首次调用时,此参数必须设置为 TRUE。 如果 IrpSp-
QueryEa.ReturnSingleEntry
设置为 TRUE 时,布尔值指示只应返回单个条目。 如果此参数为 TRUE,则 MrxQueryEaInfo 应仅返回找到的第一个条目。 如果 IrpSp->标志 具有SL_RETURN_SINGLE_ENTRY位,则此参数设置为 TRUE。
QueryEa.IndexSpecified
如果设置为 TRUE,则布尔值指示在扩展属性的条目处开始扫描,其索引由 UserEaIndex 成员提供。 如果 IrpSp->标志 具有SL_INDEX_SPECIFIED位,则此参数设置为 TRUE。
QuerySecurity
用于处理 IRP_MJ_QUERY_SECURITY 请求的未命名联合的结构成员。 此成员用于处理导致调用 MRxQuerySdInfo 例程的查询安全请求。 RDBSS 将 QuerySecurity 结构成员中的信息传递给网络微型重定向程序。
QuerySecurity.SecurityInformation
指向调用方提供的输入缓冲区的指针,其中包含指定要查询的操作的SECURITY_INFORMATION结构。 此参数设置为 IrpSp->Parameters.QuerySecurity.SecurityInformation。
QuerySecurity.Length
SecurityInformation 成员指向的缓冲区的长度(以字节为单位)。 此参数设置为 IrpSp->Parameters.QuerySecurity.Length。
SetSecurity
用于处理 IRP_MJ_SET_SECURITY 请求的未命名联合的结构成员。 此成员用于处理导致调用 MRxSetSdInfo 例程的查询安全请求。 RDBSS 将 SetSecurity 结构成员中的信息传递给网络微型重定向程序。
SetSecurity.SecurityInformation
指向调用方提供的输入缓冲区的指针,其中包含一个SECURITY_INFORMATION结构,该结构指定要在安全描述符中设置哪些安全信息。 此参数设置为 IrpSp->Parameters.SetSecurity.SecurityInformation。
SetSecurity.SecurityDescriptor
指向SECURITY_DESCRIPTOR结构的指针,该结构包含要分配给对象的安全信息的值。 此参数设置为 IrpSp->Parameters.SetSecurity.SecurityDescriptor。
QueryQuota
用于处理 IRP_MJ_QUERY_QUOTA 请求的未命名联合的结构成员。 此成员用于处理导致调用 MRxQueryQuotaInfo 例程的查询安全请求。 RDBSS 将 QueryQuota 结构成员中的信息传递给网络微型重定向程序。
QueryQuota.Length
StartSid 成员指向的缓冲区的长度(以字节为单位)。 此参数设置为 IrpSp->Parameters.QueryQuota.Length。
QueryQuota.StartSid
指向 SID 的可选指针,指示返回的信息以第一个条目以外的条目开头。 如果指定了 SidList 成员,则忽略此参数。 此参数设置为 IrpSp->Parameters.QueryQuota.StartSid。
QueryQuota.SidList
指向要返回其配额信息的 SID 列表的可选指针。 列表中的每个条目都是FILE_GET_QUOTA_INFORMATION结构。 此参数设置为 IrpSp->Parameters.QueryQuota.SidList。
QueryQuota.SidListLength
SidList 成员中 SID 列表的长度(以字节为单位)。 此参数设置为 IrpSp->Parameters.QueryQuota.SidListLength。
QueryQuota.RestartScan
设置为 TRUE 时,布尔值指示查询要在第一个条目处启动。 如果此值设置为 FALSE,扫描将从上一次调用恢复。 首次调用时,此参数必须设置为 TRUE。 如果 IrpSp->标志具有SL_RESTART_SCAN位,则此参数设置为 TRUE。
QueryQuota.ReturnSingleEntry
设置为 TRUE 时,布尔值指示只应返回单个条目。 如果此参数为 TRUE,则 MrxQueryQuotaInfo 应仅返回找到的第一个条目。 如果 IrpSp->标志 具有SL_RETURN_SINGLE_ENTRY位,则此参数设置为 TRUE。
QueryQuota.IndexSpecified
如果设置为 TRUE,则布尔值指示在索引由 StartSid 成员提供其索引的列表中的条目处开始扫描。 如果 IrpSp->标志 具有SL_INDEX_SPECIFIED位,则此参数设置为 TRUE。
SetQuota
用于处理 IRP_MJ_SET_QUOTA 请求的未命名联合的结构成员。 RDBSS 当前不使用此结构。
SetQuota.Length
SetQuota 结构的未使用成员。
DosVolumeFunction
未命名联合的结构成员。 RDBSS 当前不使用此结构。
DosVolumeFunction.VNetRoot
DosVolumeFunction 结构的未使用成员。
DosVolumeFunction.SrvCall
DosVolumeFunction 结构的未使用成员。
DosVolumeFunction.NetRoot
DosVolumeFunction 结构的未使用成员。
FlagsForLowIo
RDBSS 设置的一组 RX_CONTENT_CREATE_FLAGS,并传递到发送到网络微型重定向器的低 I/O 操作。 FlagsForLowIo 是未命名结构的成员,用于向网络微型重定向程序发出低 I/O 请求。
LowIoContext
指向传递给网络微型重定向器的 LOWIO_CONTEXT 结构的指针。 LowIoContext 是未命名结构的成员,用于发送到网络微型重定向器的低 I/O 请求。
AlsoCanonicalNameBuffer
指向 Unicode 字符串的指针,表示如果规范名称大于可用缓冲区,则表示要打开的物理文件的名称。
LoudCompletionString
RX_CONTEXT结构的未使用成员。
AcquireReleaseFcbTrackerX
保留供系统使用。
TrackerHistoryPointer
保留供系统使用。
TrackerHistory[RDBSS_TRACKER_HISTORY_SIZE]
保留供系统使用。
ShadowCritOwner
保留供系统使用。
言论
RX_CONTEXT 结构是 RDBSS 和网络微型重定向程序用来管理 I/O 请求数据包(IRP)的基本数据结构之一。 它封装 IRP 供 RDBSS、网络微型重定向器和文件系统使用。 RX_CONTEXT 结构包括指向单个 IRP 的指针以及处理 IRP 所需的所有上下文。
RX_CONTEXT 结构有时称为 WDK 头文件中的 IRP 上下文或 RxContext,以及用于开发网络微型重定向程序驱动程序的其他资源。
RX_CONTEXT 是一种数据结构,其中附加了各种网络微型重定向器提供的其他信息。 RX_CONTEXT 包括用于将每个 RX_CONTEXT 结构的大小分配为每个网络微型重定向器的预先指定量(然后保留供微型重定向程序使用)的字段。 此方法包括分配预先指定的区域,对于每个RX_CONTEXT的一部分,所有网络微型重定向器都是相同的。 这是一个未格式化的区域,其中任何所需结构都可以由各种网络微型重定向程序施加。 网络微型重定向程序驱动程序的开发人员应尝试并定义关联的专用上下文,以适应RX_CONTEXT数据结构中定义的此预定义区域。 违反此规则的网络微型重定向程序驱动程序将产生显著的性能损失。
由网络微型重定向程序导出的许多 RDBSS 例程和例程都引用了启动线程或例程使用的一些其他线程中的RX_CONTEXT结构。 因此,分配RX_CONTEXT结构的引用计数来管理它们用于异步操作。 当引用计数变为零时,可以在最后一次取消引用操作上完成和释放分配的RX_CONTEXT结构。
RDBSS 提供了许多用于操作RX_CONTEXT和关联的 IRP 的例程。 这些例程用于分配、初始化和删除RX_CONTEXT。 这些例程还用于完成与RX_CONTEXT关联的 IRP,并为RX_CONTEXT设置取消例程。
要求
要求 | 价值 |
---|---|
标头 | rxcontx.h (包括 Rx.h、Rxcontx.h) |