FsRtlRegisterUncProvider 函数 (ntifs.h)

FsRtlRegisterUncProvider 例程使用系统多个 UNC 提供程序(MUP)将网络重定向程序注册为通用命名约定(UNC) 提供程序。

语法

NTSTATUS FsRtlRegisterUncProvider(
  [out] PHANDLE          MupHandle,
        PCUNICODE_STRING RedirectorDeviceName,
  [in]  BOOLEAN          MailslotsSupported
);

参数

[out] MupHandle

指向在调用 FsRtlRegisterUncProvider 以取消注册网络重定向程序时要使用的 MUP 句柄的位置的指针。 仅当 FsRtlRegisterUncProvider 返回STATUS_SUCCESS时,返回的句柄才有效。

RedirectorDeviceName

指向包含网络重定向程序设备名称的 Unicode 字符串的指针。

[in] MailslotsSupported

如果网络重定向程序支持 mailslot,则设置为 TRUE。 此选项通常保留供Microsoft SMB 重定向程序使用。

返回值

FsRtlRegisterUncProvider 返回成功或相应的 NTSTATUS 值STATUS_SUCCESS,例如以下值之一:

返回代码 描述
STATUS_ACCESS_DENIED
发送到 MUP 的 IRP 操作的原始请求者的执行模式不是来自内核模式。
STATUS_ACCESS_VIOLATION
尝试访问 MUP 设备时发生访问冲突。
STATUS_DATATYPE_MISALIGNMENT
数据不对齐。
STATUS_INSUFFICIENT_RESOURCES
没有足够的资源可用于为缓冲区分配内存。
STATUS_INVALID_HANDLE
IRP 中向 MUP 传递了无效参数。
STATUS_INVALID_USER_BUFFER
RedirDevName 参数中传递了无效参数,或者发生了异常终止。

言论

网络重定向程序必须向 MUP 注册才能处理 UNC 名称。 MUP 是一个内核模式组件,负责使用通用命名约定(UNC)名称将所有远程文件系统访问通道到能够处理远程文件系统请求的网络重定向程序(UNC 提供程序)。 当应用程序使用 UNC 路径时,涉及 MUP,如以下示例所示,可以从命令行执行:

notepad \\server\public\readme.txt

在创建映射驱动器号的操作(例如,“NET USE”命令)期间,不涉及 MUP。 此操作由多个提供程序路由器(MPR)和网络重定向程序的用户模式 WNet 提供程序 DLL 处理。 但是,用户模式 WNet 提供程序 DLL 可能会在此操作期间直接与内核模式网络重定向程序驱动程序通信。

在 Windows Server 2003、Windows XP 和 Windows 2000 上,对不表示分布式文件系统(DFS)驱动器的映射驱动器执行的远程文件操作不会通过 MUP 执行。 这些操作直接转到处理驱动器号映射的网络提供程序。

对于符合 Windows Vistaredirector 模型的网络重定向程序,即使使用映射的网络驱动器,也涉及 MUP。 对映射驱动器执行的文件操作通过 MUP 转到网络重定向程序。 请注意,在这种情况下,MUP 只需将操作传递给所涉及的网络重定向程序。

符合 Windows Vista 重定向程序模型的网络重定向程序应使用 FsRtlRegisterUncProviderEx,而不是 FsRtlRegisterUncProvider

FsRtlRegisterUncProvider 向 MUP 发送专用文件系统控制(FSCTL)来执行注册。

ProviderOrder 注册表值确定 MUP 向单个网络重定向程序发出前缀解析请求的顺序。 此注册表值位于以下注册表项下:

HKLM\CurrentControlSet\Control\NetworkProvider\Order

对 ProviderOrder 注册表值的更改需要在 Windows Server 2003、Windows XP 和 Windows 2000 上的 MUP 中重新启动才能生效。

系统上只有一个网络提供程序可以支持 mailslots。 因此,MailslotsSupported 参数通常仅设置为 Microsoft SMB 重定向程序 TRUE

调用 IoCreateDevice 的驱动程序 为注册为 UNC 提供程序的网络重定向程序创建设备对象(调用 FsRtlRegisterUncProvider的驱动程序)必须将FILE_REMOTE_DEVICE作为传递给 IoCreateDeviceDeviceCharacteristics 参数中的一个选项传递。

若要取消注册 UNC 提供程序,请使用 FsRtlDeregisterUncProvider 并传递 MupHandle 参数。

例如,如果驱动程序注册为本地磁盘文件系统(调用 IoCreateDeviceDeviceType 参数设置为FILE_DEVICE_DISK_FILE_SYSTEM而不是FILE_NETWORK_FILE_SYSTEM),驱动程序不得调用 FsRtlRegisterUncProvider 以注册为 MUP 的 UNC 提供程序。

有关详细信息,请参阅设计指南中的以下部分:

对 UNC 命名和 MUP 的支持

Microsoft Windows Vista 中的 MUP 更改

要求

要求 价值
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDIS(storport)PowerIrpDDis(wdm)

另请参阅

FsRtlDeregisterUncProvider

FsRtlRegisterUncProviderEx

IOCTL_REDIR_QUERY_PATH_EX

IoCreateDevice