Функция FsRtlRegisterUncProviderEx (ntifs.h)

Подпрограмма FsRtlRegisterUncProviderEx регистрирует перенаправитель сети в качестве поставщика универсального соглашения об именовании (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 для отмены регистрации сетевого перенаправителя. Возвращенный дескриптор действителен, только если FsRtlRegisterUncProviderEx возвращает STATUS_SUCCESS.

[in] RedirDevName

Указатель на строку Юникода, содержащую имя устройства сетевого перенаправителя. MUP использует это имя устройства для создания символьной ссылки в пространстве имен диспетчера объектов, целевом объекте которого является \Device\Mup.

[in] DeviceObject

Указатель на неименованный объект устройства, представляющий сетевой перенаправитель.

[in] Flags

Битовая маска, указывающая функции, поддерживаемые сетевым перенаправителем. Сетевой перенаправитель задает бит, указывающий, что функция поддерживается. Параметр Flags имеет два параметра:

FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED

Сетевой перенаправитель поддерживает mailslots. Этот параметр обычно зарезервирован для использования перенаправлением Microsoft SMB.

FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED

Перенаправитель сети поддерживает автономный доступ с помощью кэширования на стороне клиента.

Возвращаемое значение

FsRtlRegisterUncProviderEx возвращает STATUS_SUCCESS при успешном выполнении или соответствующее значение NTSTATUS, например одно из следующих значений:

Код возврата Описание
STATUS_ACCESS_DENIED
Режим инициатора запроса для IRP, отправляемого в MUP, был не из режима ядра.
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), способный обрабатывать запросы удаленной файловой системы. MUP используется, когда приложение использует UNC-путь, как показано в следующем примере, который может быть выполнен из командной строки:

notepad \\server\public\readme.txt

MUP не используется во время операции, создающей сопоставленную букву диска (например, команда NET USE). Эта операция обрабатывается маршрутизатором с несколькими поставщиками (MPR) и библиотекой DLL поставщика WNet в пользовательском режиме для перенаправителя сети. Однако библиотека DLL поставщика WNet в пользовательском режиме может напрямую взаимодействовать с драйвером перенаправления сети в режиме ядра во время этой операции.

Для сетевых перенаправителей, соответствующих модели перенаправителя Windows Vista, используется MUP, даже если используется сопоставленный сетевой диск. Операции с файлами, выполняемые на сопоставленном диске, проходят через MUP к сетевому перенаправлению. Обратите внимание, что в этом случае MUP просто передает операцию сетевому перенаправителю.

FsRtlRegisterUncProviderEx отправляет элемент управления частной файловой системы (FSCTL) в MUP для выполнения регистрации.

Имя устройства, указанное в параметре RedirDevName при вызове FsRtlRegisterUncProviderEx , становится символьной ссылкой на \device\Mup в пространстве имен диспетчера объектов. Кроме того, открытый запрос с именем устройства RedirDevName перенаправляет себя к фактическому объекту устройства перенаправителя сети, на который указывает параметр DeviceObject .

Сетевые перенаправители, вызывающие FsRtlRegisterUncProviderEx , не должны регистрироваться как файловая система (перенаправители сети не должны вызывать IoRegisterFileSystem). Сетевые мини-перенаправления, использующие RDBSS Windows Vista (динамическую или статическую компоновку), не будут зарегистрированы в качестве файловой системы.

Объекты файлов в стеке удаленной файловой системы, принадлежащие сетевому перенаправлению, который соответствует модели перенаправителя Windows Vista, разрешаются в MUP. Таким образом , IoGetDeviceAttachmentBaseRef возвращает объект устройства для MUP, а не сетевой перенаправитель, которому принадлежит объект файла. Однако содержимое объекта файла по-прежнему принадлежит сетевому перенаправлению.

Значение реестра ProviderOrder определяет порядок, в котором MUP выдает запросы на разрешение префиксов отдельным сетевым перенаправителям. Этот порядок можно изменять динамически без перезагрузки. Это значение реестра находится в следующем разделе реестра:

HKLM\CurrentControlSet\Control\NetworkProvider\Order

Только один поставщик сети в системе может поддерживать почтовые ящики. Поэтому параметр FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED в параметре Flags обычно устанавливается только для перенаправителя Microsoft SMB.

Чтобы отменить регистрацию поставщика UNC, используйте FsRtlDeregisterUncProvider и передайте параметр MupHandle .

Если драйвер регистрируется как локальная дисковая файловая система (путем вызова IoCreateDevice с параметром DeviceType , равным FILE_DEVICE_DISK_FILE_SYSTEM), драйвер не должен вызывать FsRtlRegisterUncProviderEx для регистрации в качестве поставщика UNC в MUP.

Дополнительные сведения см. в следующих разделах руководства по проектированию:

Поддержка именования UNC и MUP

Изменения MUP в Microsoft Windows Vista

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

См. также раздел

FsRtlCancellableWaitForSingleObject

FsRtlDeregisterUncProvider

FsRtlRegisterUncProvider

IOCTL_REDIR_QUERY_PATH_EX

IoCreateDevice

IoGetDeviceAttachmentBaseRef

IoRegisterFileSystem