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

RX_CONTEXT 结构的标志 位掩码。

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

用于以下例程的未命名联合的结构成员:

RDBSS 将 信息 结构成员中的信息传递给网络微型重定向程序,而网络微型重定向程序会将信息返回到 Info 结构成员中的 RDBSS。

Info.FsInformationClass

RDBSS 用来传递请求到网络微型重定向程序驱动程序的FS_INFORMATION_CLASS类型的未命名联合的成员。 RDBSS 在调用 MrxQueryVolumeInfo 时,在 FsInformationClass 成员中传递信息,MrxSetVolumeInfo

Info.FileInformationClass

RDBSS 用来指示发送到网络微型重定向程序驱动程序的FILE_INFORMATION_CLASS请求类型的非命名联合的成员。 RDBSS 在调用 MrxQueryDirectoryMrxQueryFileInfo时,在 fileInformationClass 成员中传递信息,MrxSetFileInfo

Info.Buffer

用于将数据从 RDBSS 传递到网络微型重定向程序驱动程序的缓冲区,并通过 RDBSS 从网络微型重定向程序驱动程序接收响应。 Buffer 成员用于 MrxQueryDirectoryMrxQueryFileInfoMrxQueryVolumeInfoMrxSetFileInfoMRxSetFileInfoAtCleanupMrxSetVolumeInfo 例程。

Info.Length

用于将 Buffer 成员的长度从 RDBSS 传递到网络微型重定向程序驱动程序的未命名联合的成员。 Length 成员用于 MrxQueryDirectoryMrxQueryFileInfoMrxQueryVolumeInfoMrxSetFileInfoMRxSetFileInfoAtCleanupMrxSetVolumeInfo 例程。

Info.LengthRemaining

未命名联合的成员,用于将 Buffer 中返回的信息长度从网络微型重定向程序驱动程序传递到 RDBSS 成员。 LengthRemaining 成员用于 MrxQueryDirectoryMrxQueryFileInfoMrxQueryVolumeInfoMrxSetFileInfoMRxSetFileInfoAtCleanupMrxSetVolumeInfo 例程。

Info.ReplaceIfExists

一个布尔值,该值指示是否应在重命名操作期间替换现有文件。 MrxSetFileInfo 例程中使用 ReplaceIfExists 成员。

Info.AdvanceOnly

此成员保留供内部使用。

PrefixClaim

用于从多个 UNC 提供程序(MUP)发送的前缀解析请求的未命名联合的结构成员。 前缀声明从 MUP 到 RDBSS 的 IRP_MJ_DEVICE_CONTROL 请求导致 IOCTL_REDIR_QUERY_PATHIOCTL_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。 对于通配符查询(““例如,RDBSS 会将关联的 FOBX 成员的 UnicodeQueryTemplate.Buffer 设置为传递的通配符查询。

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-标志 具有SL_RESTART_SCAN位,则此参数设置为 TRUE。

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)

另请参阅

FILE_GET_EA_INFORMATION

IOCTL_REDIR_QUERY_PATH

IOCTL_REDIR_QUERY_PATH_EX

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_DIRECTORY_CONTROL

IRP_MJ_QUERY_EA

IRP_MJ_QUERY_QUOTA

IRP_MJ_QUERY_SECURITY

IRP_MJ_SET_QUOTA

IRP_MJ_SET_SECURITY

IoCompletion

IoMarkIrpPending

MRxCreate

MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]

MRxQueryDirectory

MRxQueryEaInfo

MRxQueryFileInfo

MRxQueryQuotaInfo

MRxQuerySdInfo

MRxQueryVolumeInfo

MRxSetFileInfo

MRxSetFileInfoAtCleanup

MRxSetSdInfo

MRxSetVolumeInfo

RxCreateRxContext

RxInitializeContext

RxStartMinirdr