FsRtlRegisterUncProviderEx 函数 (ntifs.h)

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

语法

NTSTATUS FsRtlRegisterUncProviderEx(
  [out] PHANDLE                  MupHandle,
  [in]  PCUNICODE_STRING         RedirDevName,
  [in]  PDEVICE_OBJECT           DeviceObject,
  [in]  FSRTL_UNC_PROVIDER_FLAGS Flags
);

参数

[out] MupHandle

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

[in] RedirDevName

指向包含网络重定向程序设备名称的 Unicode 字符串的指针。 MUP 使用此设备名称在目标为 \Device\Mup 的对象管理器命名空间中创建符号链接。

[in] DeviceObject

指向表示网络重定向程序的未命名设备对象的指针。

[in] Flags

一个位掩码,指示网络重定向器支持的功能。 网络重定向程序设置一个位来指示支持某个功能。 Flags 参数有两个选项:

FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED

网络重定向程序支持 mailslot。 此选项通常保留供 Microsoft SMB 重定向程序使用。

FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED

网络重定向程序支持使用客户端缓存进行脱机访问。

返回值

FsRtlRegisterUncProviderEx 在成功时返回STATUS_SUCCESS或适当的 NTSTATUS 值,例如以下值之一:

返回代码 说明
STATUS_ACCESS_DENIED
发送到 MUP 的 IRP 的请求者模式不是来自内核模式。
STATUS_ACCESS_VIOLATION
尝试访问 MUP 设备时发生访问冲突。
STATUS_DATATYPE_MISALIGNMENT
数据不一致。
STATUS_INSUFFICIENT_RESOURCES
没有足够的资源可用于为缓冲区分配内存。
STATUS_INVALID_DEVICE_REQUEST
请求注册已注册的已知提供程序。
STATUS_INVALID_PARAMETER
RedirDevName 参数无效,因为 RedirDevName 的长度为零。
STATUS_OBJECT_TYPE_MISMATCH
DeviceObject 参数遇到对象类型不匹配。

注解

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

notepad \\server\public\readme.txt

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

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

FsRtlRegisterUncProviderEx 将专用文件系统控件 (FSCTL) 发送到 MUP 以执行注册。

在调用 FsRtlRegisterUncProviderEx 时,RedirDevName 参数中指定的设备名称将成为对象管理器命名空间中 \device\Mup 的符号链接。 此外,设备名称 RedirDevName 的打开请求会将自身路由到 DeviceObject 参数指向的实际网络重定向程序设备对象。

调用 FsRtlRegisterUncProviderEx 的网络重定向程序不得将自己注册为文件系统 (网络重定向程序不得调用 IoRegisterFileSystem) 。 使用 Windows Vista RDBSS (动态或静态链接) 的网络微型重定向器将不会注册为文件系统。

符合 Windows Vista 重定向程序模型的网络重定向程序拥有的远程文件系统堆栈上的文件对象解析为 MUP。 因此 ,IoGetDeviceAttachmentBaseRef 返回 MUP 的设备对象,而不是拥有文件对象的网络重定向程序。 但是,文件对象的内容仍由网络重定向程序拥有。

ProviderOrder 注册表值确定 MUP 向单个网络重定向程序发出前缀解析请求的顺序。 无需重新启动即可动态更改此顺序。 此注册表值位于以下注册表项下:

HKLM\CurrentControlSet\Control\NetworkProvider\Order

系统上只有一个网络提供程序可以支持 mailslot。 因此, Flags 参数中的FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED选项通常仅为 Microsoft SMB 重定向程序设置。

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

如果驱动程序通过将 DeviceType 参数设置为 FILE_DEVICE_DISK_FILE_SYSTEM) 调用 IoCreateDevice 注册为本地磁盘文件系统 (,则驱动程序不得调用 FsRtlRegisterUncProviderEx 以注册为 MUP 的 UNC 提供程序。

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

支持 UNC 命名和 MUP

Microsoft Windows Vista 中的 MUP 更改

要求

要求
最低受支持的客户端 Windows Vista
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) PowerIrpDDis (wdm)

另请参阅

FsRtlCancellableWaitForSingleObject

FsRtlDeregisterUncProvider

FsRtlRegisterUncProvider

IOCTL_REDIR_QUERY_PATH_EX

IoCreateDevice

IoGetDeviceAttachmentBaseRef

IoRegisterFileSystem