RxFsdDispatch 函数 (mrx.h)

RxFsdDispatch 实现文件系统驱动程序 (FSD) 调度,以便 RDBSS 处理 I/O 请求数据包 (IRP) 。 在初始化 RDBSS 时, 将通过 RxDriverEntry 例程为网络微型重定向程序驱动程序的设备驱动程序调度表复制指向此例程的指针。

语法

NTSTATUS RxFsdDispatch(
  [in] IN PRDBSS_DEVICE_OBJECT RxDeviceObject,
  [in] IN PIRP                 Irp
);

参数

[in] RxDeviceObject

指向此网络微型重定向器的 RDBSS 设备对象的指针。

[in] Irp

指向正在处理的 I/O 请求数据包的指针。

返回值

RxFsdDispatch 返回以下值之一:

返回代码 说明
STATUS_INVALID_DEVICE_REQUEST
在无效的设备对象上发出了请求。 例如,如果文件系统对象作为 RxDeviceObject 参数传递,则返回此错误。 此状态值指示失败。
STATUS_OBJECT_NAME_INVALID
创建命名管道或 mailslot 的请求无效, (IrpMajorFunction 成员IRP_MJ_CREATE_MAILSLOT或IRP_MJ_CREATE_NAMED_PIPE) 。 此状态值指示失败。
STATUS_PENDING
发出了异步请求,请求的状态处于挂起状态。
STATUS_SUCCESS
RxFsdDispatch 例程调用成功。

注解

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

调用 RxDriverEntry 例程以初始化 RDBSS 时,会通过网络微型重定向程序驱动程序的驱动程序调度表复制指向 RxFsdDispatch 例程的指针。

在内部,RDBSS 维护两个调度向量:

  • 大多数操作的常见调度向量。
  • 文件设备 FCB 操作的专用调度向量。
如果 IRP 是IRP_MJ_CREATE请求,则 RxFsdDispatch 将使用常见的调度向量。 如果 IRP 用于对文件对象的 FCB 执行的操作, RxFsdDispatch 将检查是否应使用专用调度矢量。 否则,公共调度向量将用于处理 IRP。

RxFsdDispatch 调用内部例程以处理标准 IRP,其中大多数都会导致调用网络微型重定向程序驱动程序实现的回调例程之一。

一些 IRP 被视为特殊且由 RDBSS 在内部处理。 例如,如果启用了 WMI,则IRP_MJ_SYSTEM_CONTROL在内部使用。 IRP_MJ_CREATE_MAILSLOT或IRP_MJ_CREATE_NAMED_PIPE请求经过特殊处理, () 返回STATUS_OBJECT_NAME_INVALID错误被拒绝。

要求

   
目标平台 桌面
Header mrx.h (包括 Mrx.h、Rxstruc.h、Struchdr.h)
IRQL <= APC_LEVEL

另请参阅

RxDriverEntry