RX_CONTEXT 结构 (rxcontx.h)
RX_CONTEXT结构封装了一个 IRP,供 RDBSS、网络微型重定向器和文件系统使用。 RX_CONTEXT结构描述网络微型重定向程序正在处理 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结构的唯一节点类型。 例如,RDBSS 使用的所有主要结构类型 (RX_CONTEXT、SRV_CALL、NET_ROOT、V_NET_ROOT、SRV_OPEN、FCB 和 FOBX,例如 RDBSS 使用的) 具有 nodetype.h 中定义的唯一的双字节节点类型代码,该文件可用于调试。 RDBSS 将此成员设置为在 RxInitializeContext 例程中初始化RX_CONTEXT时RDBSS_NTC_RX_CONTEXT。 如果网络微型重定向程序驱动程序使用其他方法初始化RX_CONTEXT结构,则必须设置此成员。
RDBSS 将此成员定义为 RDBSS 使用的所有结构的标准标头的一部分。
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 将此成员设置为网络微型重定向程序驱动程序的设备对象。 此成员是从 IRP 堆栈的 FileObject-DeviceObject> 成员复制的。 网络微型重定向程序的设备对象也存储在 RxDeviceObject 结构成员中。
RDBSS 当前不使用 RealDevice 成员,但可由网络微型重定向程序使用。
CurrentIrp
指向原始 IRP 的指针。 网络微型重定向程序驱动程序不应使用此成员。
CurrentIrpSp
指向 IRP 堆栈位置的指针。
pFcb
指向此 IRP 的关联文件控制块的指针 (FCB) 。
pFobx
指向此 IRP 的关联文件对象扩展 (FOBX) 的指针。
pRelevantSrvOpen
指向关联服务器的指针为此 IRP 打开 (SRV_OPEN) 。
NonPagedFcb
指向此 IRP 的关联非分页文件控制块的指针 (FCB) 。
RxDeviceObject
指向目标网络微型重定向程序驱动程序RDBSS_DEVICE_OBJECT的指针,该驱动程序是辅助角色队列算法所必需的。 在 RxInitializeContext 例程中初始化RX_CONTEXT时,RDBSS 将此成员设置为网络微型重定向程序的RDBSS_DEVICE_OBJECT。 RxDeviceObject 结构包括一个 DeviceObject 成员,该成员包含网络微型重定向程序驱动程序的设备对象,该对象与RX_CONTEXT的 RealDevice 成员相同。
OriginalThread
指向发起请求的原始线程的指针。
LastExecutionThread
指向最后一个线程的指针,如果线程已发布到文件系统进程,则执行与RX_CONTEXT关联的某些处理。
LockManagerContext
指向锁管理器上下文的指针。 此成员保留供内部使用。
RdbssDbgExtension
指向提供给 RDBSS 用于调试信息的上下文的指针。 此成员保留供内部使用。
ScavengerEntry
指向要清理的项列表的指针。 此成员保留供内部使用。
SerialNumber
此RX_CONTEXT结构的序列号。 第一次初始化结构时,RDBSS 初始化的每个结构都有一个分配的序列号。 此序列号是在设置值之前递增 1 的数字。 RDBSS 在 RxInitializeContext 例程中初始化RX_CONTEXT时设置此成员。 RDBSS
FobxSerialNumber
关联的 FOBX 结构的序列号。 第一次初始化结构时,RDBSS 初始化的每个结构都有一个分配的序列号。 网络微型重定向程序可以使用此成员来查看多个调用是否属于同一个更大的操作,因此更易于缓存。
Flags
此RX_CONTEXT结构的标志位掩码。
FcbResourceAcquired
如果设置为 TRUE,则此成员指定已为此操作获取 FCB 资源。 FCB 资源是与 FCB 上的操作关联的锁定机制之一。
FcbPagingIoResourceAcquired
如果设置为 TRUE,则此成员指定已为此操作获取 FCB 分页 I/O 资源。 FCB 分页 I/O 资源是与 FCB 上的分页 I/O 操作关联的锁定机制之一。
MustSucceedDescriptorNumber
成员最初在 RxCreateRxContext 例程中设置为零。 RDBSS 不会以其他方式使用此成员,但它可由网络微型重定向程序使用。
StoredStatus
StoredStatusAlignment
InformationToReturn
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、MRxSetFileInfo、MRxSetFileInfoAtCleanup 和 MRxSetVolumeInfo 例程的未命名联合的结构成员。 RDBSS 将 信息 结构成员中的信息传递给网络微型重定向程序,网络微型重定向程序将信息返回到 信息 结构成员中的 RDBSS。
Info.FsInformationClass
RDBSS 用来将请求的FS_INFORMATION_CLASS类型传递给网络微型重定向程序驱动程序的未命名联合的成员。 RDBSS 在调用 “MrxQueryVolumeInfo ” 和 MrxSetVolumeInfo 时传递 FsInformationClass 成员中的信息。
Info.FileInformationClass
RDBSS 用来指示发送到网络微型重定向程序驱动程序的FILE_INFORMATION_CLASS请求的类型,是未命名联合的成员。 RDBSS 在调用 MrxQueryDirectory、MrxQueryFileInfo 和 MrxSetFileInfo 时传递 FileInformationClass 成员中的信息。
Info.Buffer
一个缓冲区,用于将数据从 RDBSS 传递到网络微型重定向程序驱动程序,并接收 RDBSS 来自网络微型重定向程序驱动程序的响应。 Buffer 成员用于 MrxQueryDirectory、MrxQueryFileInfo、MrxQueryVolumeInfo、MrxSetFileInfo、MRxSetFileInfoAtCleanup 和 MrxSetVolumeInfo 例程。
Info.Length
用于将 缓冲区 成员的长度从 RDBSS 传递到网络微型重定向程序驱动程序的未命名联合的成员。 Length 成员用于 MrxQueryDirectory、MrxQueryFileInfo、MrxQueryVolumeInfo、MrxSetFileInfo、MRxSetFileInfoAtCleanup 和 MrxSetVolumeInfo 例程。
Info.LengthRemaining
未命名联合的成员,用于将 缓冲区 成员中返回的信息长度从网络微型重定向程序驱动程序传递到 RDBSS。 LengthRemaining 成员用于 MrxQueryDirectory、MrxQueryFileInfo、MrxQueryVolumeInfo、MrxSetFileInfo、MRxSetFileInfoAtCleanup 和 MrxSetVolumeInfo 例程。
Info.ReplaceIfExists
一个布尔值,指示是否应在重命名操作期间替换现有文件。 ReplaceIfExists 成员用于 MrxSetFileInfo 例程。
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 结构成员中的信息传递给网络微型重定向程序,网络微型重定向程序将信息返回到 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 基于 IRP 的 Parameters.Create.SecurityContext 成员的值来设置此值。 如果 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-Flags> 具有SL_RETURN_SINGLE_ENTRY位,则此参数设置为 TRUE。
QueryDirectory.IndexSpecified
设置为 TRUE 时,布尔值指示开始扫描目录中索引由 FileIndex 成员提供的条目。 如果 IrpSp 标志>具有SL_INDEX_SPECIFIED位,则此参数设置为 TRUE。
QueryDirectory.InitialQuery
一个布尔值,当查询不是 (“.”的野生卡查询时设置为 TRUE,例如) 。 如果关联的 FOBX 的 UnicodeQueryTemplate.Buffer 成员为 NULL,并且 FOBX 的 Flags 成员没有打开FOBX_FLAG_MATCH_ALL位,则此成员设置为 TRUE。 对于 (“.”的野生卡查询(例如) ),RDBSS 会将关联的 FOBX 的 UnicodeQueryTemplate.Buffer 成员设置为传递的野生卡查询。
NotifyChangeDirectory
用于处理IRP_MJ_DIRECTORY_CONTROL请求的未命名联合的结构成员,次要函数为 IRP_MN_NOTIFY_CHANGE_DIRECTORY。 此成员用于处理导致调用 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 成员指向非空列表,则应忽略此参数。 此参数设置为 IrpSp-Parameters.QueryEa.EaIndex>。
QueryEa.RestartScan
设置为 TRUE 时,布尔值指示查询从第一个扩展属性条目开始。 如果此值设置为 FALSE,则扫描将从上一次调用恢复。 首次调用时,此参数必须设置为 TRUE。 如果 IrpSp 标志>具有SL_RESTART_SCAN位,则此参数设置为 TRUE。
QueryEa.ReturnSingleEntry
设置为 TRUE 时,布尔值指示只应返回一个条目。 如果此参数为 TRUE,则 MrxQueryEaInfo 应仅返回找到的第一个条目。 如果 IrpSp-Flags> 具有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 列表的长度(以字节为单位),如果指定了 SidList 成员。 此参数设置为 IrpSp-Parameters.QueryQuota.SidListLength>。
QueryQuota.RestartScan
设置为 TRUE 时,布尔值指示查询要从第一个条目开始。 如果此值设置为 FALSE,则扫描将从以前的调用恢复。 首次调用时,此参数必须设置为 TRUE。 如果 IrpSp-Flags> 已打开 SL_RESTART_SCAN 位,则此参数设置为 TRUE。
QueryQuota.ReturnSingleEntry
设置为 TRUE 时,布尔值指示只应返回一个条目。 如果此参数为 TRUE,则 MrxQueryQuotaInfo 应仅返回找到的第一个条目。 如果 IrpSp-Flags> 已打开 SL_RETURN_SINGLE_ENTRY 位,则此参数设置为 TRUE。
QueryQuota.IndexSpecified
设置为 TRUE 时,布尔值指示开始扫描列表的索引由 StartSid 成员提供。 如果 IrpSp-Flags> 已打开 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
LowIoContext
AlsoCanonicalNameBuffer
LoudCompletionString
RX_CONTEXT 结构的未使用成员。
AcquireReleaseFcbTrackerX
TrackerHistoryPointer
TrackerHistory[RDBSS_TRACKER_HISTORY_SIZE]
ShadowCritOwner
StoredStatus
未命名联合的成员,用于通过网络微型重定向程序驱动程序返回低 I/O 操作的状态信息。 RDBSS 还基于 MRxQueryFileInfo 例程返回的状态(当 RDBSS 无法理解文件查询操作时)设置此值。
StoredStatusAlignment
用于强制 StoredStatus 成员正确对齐的未命名联合的成员。
InformationToReturn
未命名联合的成员,用于通过网络微型重定向程序驱动程序返回某些低 I/O (读取、写入、FSCTL 等 ) 和 MrxQueryXXX 操作的状态信息。
用于RX_CONTEXT结构的唯一节点类型。 例如,RDBSS 使用的所有主要结构类型 (RX_CONTEXT、SRV_CALL、NET_ROOT、V_NET_ROOT、SRV_OPEN、FCB 和 FOBX,例如 RDBSS 使用的) 具有 nodetype.h 中定义的唯一的双字节节点类型代码,该文件可用于调试。 RDBSS 将此成员设置为在 RxInitializeContext 例程中初始化RX_CONTEXT时RDBSS_NTC_RX_CONTEXT。 如果网络微型重定向程序驱动程序使用其他方法初始化RX_CONTEXT结构,则必须设置此成员。
RDBSS 将此成员定义为 RDBSS 使用的所有结构的标准标头的一部分。
FlagsForLowIo
由 RDBSS 设置并传递给发送到网络微型重定向程序的低 I/O 操作的一组选项。 FlagsForLowIo 是未命名结构的一个成员,用于向网络微型重定向程序发出低 I/O 请求。
LowIoContext
指向传递给网络微型重定向程序的LOWIO_CONTEXT结构的指针。 LowIoContext 是用于发送到网络微型重定向器的低 I/O 请求的未命名结构的成员。
注解
RX_CONTEXT结构是 RDBSS 和网络微型重定向程序用于管理 I/O 请求数据包 (IRP) 的基本数据结构之一。 RX_CONTEXT数据结构封装了一个 IRP,供 RDBSS、网络微型重定向器和文件系统使用。 RX_CONTEXT结构包括指向单个 IRP 的指针以及处理 IRP 所需的所有上下文。
RX_CONTEXT结构有时称为 Windows 驱动程序工具包中的 IRP 上下文或 RxContext, (WDK) 或 IFS Kit 头文件以及用于开发网络微型重定向程序驱动程序的其他资源。
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设置取消例程。
要求
要求 | 值 |
---|---|
Header | rxcontx.h (包括 Rx.h、Rxcontx.h) |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈