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 取消注册为具有 MUP 的 UNC 提供程序, (代表网络微型重定向程序) 调用 FsRtlDeregisterUncProvider 。 RxStopMinirdr 还会将文件系统取消注册到 I/O 管理器, (代表网络微型重定向程序) 调用 IoUnregisterFileSystem) 。
然后,如果实现了此例程, 则 RxStopMinirdr 例程会调用网络微型重定向程序 MrxStop 回调例程。 如果没有剩余的活动 FDB,则返回STATUS_SUCCESS。 如果存在一些剩余的活动 FDB,则返回STATUS_REDIRECTOR_HAS_OPEN_HANDLES。 在任一情况下,重定向器的 RDBSS 调度程序都将被旋转,RDBSS 中网络微型重定向程序的内部状态设置为RDBSS_STARTABLE。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | mrx.h (包括 Mrx.h) |
IRQL | <= APC_LEVEL |