RxFsdPostRequest 函数 (rxprocs.h)

RxFsdPostRequest 将 I/O 请求数据包(IRP)由RX_CONTEXT结构指定的 I/O 请求数据包排到辅助角色队列,以供文件系统进程(FSP)处理。

语法

NTSTATUS RxFsdPostRequest(
  [in] IN PRX_CONTEXT RxContext
);

参数

[in] RxContext

指向包含要排队到工作线程的 IRP 的RX_CONTEXT的指针。

返回值

RxFsdPostRequest 返回以下值:

返回代码 描述
STATUS_PENDING
发出异步请求,并已排队到工作线程以供以后处理。 请求的状态处于挂起状态。

言论

RxFsdPostRequest 通常由 RDBSS 调用以处理异步 I/O 请求数据包(IRP)。 RDBSS 通常会接收这些 IRP,以响应请求对文件执行的作的用户模式应用程序。 另一个内核驱动程序也可以发出此类 IRP。

如果 RxContext 参数指向的RX_CONTEXT结构的 标志 成员没有RX_CONTEXT_FLAG_NO_PREPOSTING_NEEDED位集,则 RxFsdPostRequest 将尝试锁定某些类型请求所需的任何用户地址空间。 导致此行为的请求基于由 RxContext 指向的 RX_CONTEXT 结构的 MajorFunction 成员,并包括以下内容:

  • RxContext->MinorFunctionIRP_MN_QUERY_DIRECTORY 时,IRP_MJ_DIRECTORY CONTROL。
  • IRP_MJ_QUERY_EA
  • IRP_MJ_READ
  • IRP_MJ_SET_EA
  • IRP_MJ_WRITE
MajorFunctionRxContext 的成员将确定此请求将发布到哪个工作队列。 IRP_MJ_DEVICE_CONTROL请求,其中 Parameters.DeviceIoControl.IoControlCode 成员IOCTL_REDIR_QUERY_PATH将发布到延迟的工作队列。 在这种情况下,标志RxContext 参数的成员将设置RX_CONTEXT_FLAG_FSP_DELAYED_OVERFLOW_QUEUE位。 所有其他请求都会发布到关键工作队列,RxContext 参数的 Flags 成员将设置RX_CONTEXT_FLAG_FSP_CRITICAL_OVERFLOW_QUEUE位。

如果 IRP 的 FileObject 成员未 NULL 并且可以立即发布请求进行处理(设备队列的阈值为空),则会发生此情况。 否则,请求将发布到卷上的溢出队列。

RxFsdPostRequest 的所有调用都排队到工作线程,以调用传入 RxContext 参数的 RxFsdDispatch 例程。

要求

要求 价值
目标平台 桌面
标头 rxprocs.h(包括 Rxprocs.h、Rxcontx.h)
IRQL <= APC_LEVEL

另请参阅

RxFsdDispatch