RxStopMinirdr 函数 (mrx.h)

调用 RxStopMinirdr 以停止以前已启动的网络微型重定向程序。 作为 RxStopMinirdr 的一部分,如果驱动程序指示支持 UNC 名称,RDBSS 还将将网络微型重定向程序驱动程序取消注册为通用命名约定, (UNC) 提供程序与多个 UNC 提供程序 (MUP) 。

语法

NTSTATUS RxStopMinirdr(
  [in]  IN PRX_CONTEXT RxContext,
  [out] OUT PBOOLEAN   PostToFsp
);

参数

[in] RxContext

指向RX_CONTEXT结构的指针,用于获取设备对象并确定这是文件系统进程。

[out] PostToFsp

指向逻辑值的指针,如果必须发布请求以供文件系统进程稍后处理,则返回时设置为 TRUE。

返回值

如果停止序列成功或以下错误值之一,RxStopMinirdr 将返回STATUS_SUCCESS:

返回代码 说明
STATUS_PENDING RDBSS 和网络微型重定向程序的停止序列必须在文件系统进程的上下文中完成。 如果对 RxStopMinirdr 的调用来自用户模式请求 (另一个进程(例如) ),则将发布请求以供以后处理,并返回STATUS_PENDING。 如果某些内部 RDBSS 锁在等待前无法获取,则也可能返回此错误。
STATUS_REDIRECTOR_HAS_OPEN_HANDLES 网络微型重定向程序具有打开的句柄,目前无法停止。
STATUS_REDIRECTOR_STOPPED 网络微型重定向程序已停止。

注解

向 RDBSS 发出停止请求时,RDBSS 中可能存在正在进行的请求。 某些请求可以取消,而其余请求需要处理到完成。

可以使用多种策略来关闭 RDBSS。 目前,采用的是最保守的方法。 取消那些可以取消的操作和停止操作将一直保留,直到剩余请求运行到完成。

RDBSS RxStopMinirdr 通常是由于用户模式应用程序或服务发出 FSCTL 或 IOCTL 请求来停止网络微型重定向程序的结果,但此调用也可以从网络微型重定向器进行,也可以作为操作系统关闭处理的一部分进行。

发出对 RxStopMinirdr 的调用后,RDBSS 允许并传递给网络微型重定向程序的唯一操作将重新请求以下 I/O 请求数据包:

  • IRP_MJ_CLEANUP
  • IRP_MJ_CLOSE

RDBSS 和网络微型重定向器的停止序列必须在文件系统进程的上下文中完成。 如果对 RxStopMinirdr 的调用来自用户模式请求 (不同的进程(例如) ),则必须发布该请求以供以后处理,并且将返回STATUS_PENDING。 在这种情况下, (调用方登录 ID) 的有效用户 ID 保存在 RxContext 参数的 FsdUid 成员中。 此外,如果在等待的情况下无法获取某些内部 RDBSS 锁,则返回STATUS_PENDING并将 PostToFsp 设置为 TRUE。 返回STATUS_PENDING时,将发布 RxStopMinirdr 供文件系统进程稍后处理并完成。

如果网络微型重定向程序指示在注册 RDBSS 时支持 UNC, (Controls 参数到 RxRegisterMinirdr) ,则 RxStopMinirdr 将尝试将网络微型重定向器的 DeviceName 取消注册为 UNC 提供程序,MUP (代表网络微型重定向程序调用 FsRtlDeregisterUncProvider) 。 RxStopMinirdr 还向 I/O 管理器取消注册文件系统, (代表网络微型重定向程序) 调用 IoUnregisterFileSystem) 。

然后,如果实现了此例程, 则 RxStopMinirdr 例程会调用网络微型重定向器 MrxStop 回调例程。 如果没有剩余活动的 FDB,则返回STATUS_SUCCESS。 如果存在一些剩余的活动 FDB,则返回STATUS_REDIRECTOR_HAS_OPEN_HANDLES。 在任一情况下,redrector 的 RDBSS 调度程序都将被关闭,RDBSS 中网络微型重定向器的内部状态设置为RDBSS_STARTABLE。

要求

   
目标平台 桌面
标头 mrx.h (包括 Mrx.h)
IRQL <= APC_LEVEL

另请参阅

FsRtlDeregisterUncProvider

IoUnregisterFileSystem

RxRegisterMinirdr

RxStartMiniRdr

RxUnregisterMinirdr

RxpUnregisterMinirdr