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

用于 MRxQueryDirectoryMRxQueryFileInfoMRxQueryVolumeInfo、MRxSetFileInfoMRxSetFileInfo、MRxSetFileInfoAtCleanupMRxSetVolumeInfo 例程的未命名联合的结构成员。 RDBSS 将 信息 结构成员中的信息传递给网络微型重定向程序,网络微型重定向程序将信息返回到 信息 结构成员中的 RDBSS。

Info.FsInformationClass

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

Info.FileInformationClass

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

Info.Buffer

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

Info.Length

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

Info.LengthRemaining

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

Info.ReplaceIfExists

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

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 结构成员中的信息传递给网络微型重定向程序,网络微型重定向程序将信息返回到 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)

另请参阅

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