Функция RxStopMinirdr (mrx.h)

RxStopMinirdr вызывается для остановки ранее запущенного мини-перенаправления сети. В рамках RxStopMinirdr RDBSS также отменит регистрацию драйвера сетевого мини-перенаправления в качестве поставщика универсального соглашения об именовании (UNC) с поставщиком MUP, если драйвер указывает на поддержку 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 и передаваемыми в мини-перенаправление сети, являются запросы rerquest для следующих пакетов запросов ввода-вывода:

  • IRP_MJ_CLEANUP
  • IRP_MJ_CLOSE

Последовательность остановки для RDBSS и мини-перенаправления сети должна быть завершена в контексте процесса файловой системы. Если вызов RxStopMinirdr поступает из другого процесса (например, запроса в пользовательском режиме), запрос должен быть опубликован для последующей обработки и STATUS_PENDING будет возвращен. В этом случае действующий идентификатор пользователя (идентификатор входа) вызывающего объекта сохраняется в элементе FsdUid параметра RxContext . Кроме того, если определенные внутренние блокировки RDBSS не могут быть получены без ожидания, возвращается STATUS_PENDING, а postToFsp имеет значение TRUE. Когда возвращается STATUS_PENDING, RxStopMinirdr отправляется для последующей обработки процессом файловой системы и завершается.

Если мини-перенаправление сети указывает на поддержку UNC при регистрации с помощью RDBSS (параметр Controls для RxRegisterMinirdr), то RxStopMinirdr попытается отменить регистрацию DeviceName мини-перенаправления сети в качестве поставщика UNC с MUP (вызывает FsRtlDeregisterUncProvider от имени мини-перенаправления сети). RxStopMinirdr также отменяет регистрацию файловой системы в диспетчере ввода-вывода (вызывает IoUnregisterFileSystem) от имени мини-перенаправителя сети.

Затем подпрограмма RxStopMinirdr вызывает подпрограмму обратного вызова MrxStop сетевого мини-перенаправления, если эта процедура реализована. Если активных FDB-файлов не осталось, возвращается STATUS_SUCCESS. Если осталось несколько активных FDB, возвращается STATUS_REDIRECTOR_HAS_OPEN_HANDLES. В любом случае диспетчер RDBSS для redrector отключен, а внутреннее состояние мини-перенаправителя сети в RDBSS установлено на RDBSS_STARTABLE.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть mrx.h (включая Mrx.h)
IRQL <= APC_LEVEL

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

FsRtlDeregisterUncProvider

IoUnregisterFileSystem

RxRegisterMinirdr

RxStartMiniRdr

RxUnregisterMinirdr

RxpUnregisterMinirdr