RxStopMinirdr 函数 (mrx.h)
调用 RxStopMinirdr 以停止以前启动的网络微型重定向程序。 作为 RxStopMinirdr的一部分,如果驱动程序指示支持 UNC 名称,RDBSS 还将取消将网络微型重定向程序驱动程序注册为通用命名约定(UNC)提供程序(UNC)。
语法
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 例程,然后在实现此例程时调用 network mini-redirector MrxStop 回调例程。 如果没有剩余的活动 FCB,则返回STATUS_SUCCESS。 如果存在一些剩余的活动 FCB,则返回STATUS_REDIRECTOR_HAS_OPEN_HANDLES。 无论哪种情况,重定向程序的 RDBSS 调度程序都已启动,RDBSS 中的网络微型重定向程序的内部状态设置为RDBSS_STARTABLE。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | mrx.h (包括 Mrx.h) |
IRQL | <= APC_LEVEL |