Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
RxStartMinirdr вызывается для запуска мини-перенаправления сети, который ранее вызывался для регистрации в RDBSS. В рамках RxStartMinirdr RDBSS также зарегистрирует драйвер мини-перенаправления сети в качестве универсального поставщика именования (UNC) с несколькими поставщиками UNC (MUP), если драйвер указывает поддержку имен UNC.
Синтаксис
NTSTATUS RxStartMinirdr(
[in] IN PRX_CONTEXT RxContext,
[out] OUT PBOOLEAN PostToFsp
);
Параметры
[in] RxContext
Указатель на структуру RX_CONTEXT, используемую для получения объекта устройства и определения того, является ли это процесс файловой системы.
[out] PostToFsp
Указатель на логическое значение, заданное значением TRUE при возврате, если запрос должен быть размещен для последующей обработки процессом файловой системы.
Возвращаемое значение
RxStartMinirdr возвращает STATUS_SUCCESS, если последовательность запуска была успешной или одним из следующих значений ошибок:
| Код возврата | Description |
|---|---|
| STATUS_ACCESS_DENIED | Запрос на регистрацию в качестве поставщика UNC завершился ошибкой, так как доступ был отклонен. |
| STATUS_ACCESS_VIOLATION | Запрос на регистрацию в качестве поставщика UNC произошел с нарушением доступа. |
| STATUS_INSUFFICIENT_RESOURCES | Для выполнения этой процедуры недостаточно ресурсов. |
| STATUS_PENDING | Последовательность запуска для RDBSS и мини-перенаправлений сети должна быть завершена в контексте системного процесса, а не процесса приложения в режиме пользователя. Если вызов RxStartMinirdr поступает из процесса пользовательского режима (например, запроса на обслуживание в режиме пользователя), запрос будет размещен для последующей обработки в RDBSS И STATUS_PENDING будет возвращен. Эта ошибка также может быть возвращена, если некоторые внутренние блокировки RDBSS не могут быть приобретены без ожидания. Вызов будет выполнен позже из системного потока. |
| STATUS_REDIRECTOR_STARTED | Мини-перенаправление сети уже запущен. |
Замечания
Мини-перенаправление сети регистрируется в RDBSSS всякий раз, когда драйвер загружается ядром, а затем отменяет регистрацию с помощью RDBSS при выгрузке драйвера. Сетевой мини-перенаправление сообщает RDBSS, что он был загружен путем вызова RxRegisterMinirdr, подпрограммы регистрации, экспортированной из RDBSS. В рамках этого процесса регистрации мини-перенаправление сети передает параметр rxRegisterMinirdr , который является указателем на большую структуру, MINIRDR_DISPATCH, которая содержит сведения о конфигурации для мини-перенаправления сети и таблицу указателей на подпрограммы обратного вызова, реализованные драйвером мини-перенаправления сети. RDBSS использует подпрограммы обратного вызова, передаваемые в этой структуре, для взаимодействия с мини-перенаправлением сети.
Мини-перенаправление сети фактически не запускает операцию, пока она не получит вызов своей подпрограммы MRxStart , одной из подпрограмм обратного вызова, переданных в структуре MINIRDR_DISPATCH. Подпрограмма обратного вызова MrxStart должна быть реализована драйвером мини-перенаправления сети, если он хочет получать подпрограммы обратного вызова для операций, если сетевой мини-перенаправление не сохраняет собственные точки входа диспетчера драйверов. В противном случае RDBSS будет разрешать только следующие пакеты запросов ввода-вывода через драйвер, пока mrxStart не будет успешно возвращен:
- Запросы IRP для операций создания устройств и операций устройства, где параметр FileObject-FileName.Length> в IRPSP равен нулю, а параметр FileObject-RelatedFileObject> имеет значение NULL.
Для любого другого запроса IRP диспетчер RDBSS, подпрограмма RxFsdDispatch возвращает состояние STATUS_REDIRECTOR_NOT_STARTED.
Подпрограмма отправки RDBSS также завершится сбоем запросов для следующих пакетов запросов ввода-вывода:
- IRP_MJ_CREATE_MAILSLOT
- IRP_MJ_CREATE_NAMED_PIPE
Подпрограмма mrxStart для сети мини-перенаправления вызывается RDBSS при вызове подпрограммы RxStartMinirdr . Обычно подпрограмма RXStartMinirdr RDBS RxStartMinirdr вызывается в результате запроса FSCTL или IOCTL из приложения или службы пользовательского режима, чтобы запустить мини-перенаправление сети. Вызов RxStartMinirdr нельзя сделать из подпрограммы DriverEntry мини-перенаправления сети после успешного вызова RxRegisterMinirdr , так как некоторые из начальной обработки требуют завершения инициализации драйвера.
Когда RDBSS получает запрос FSCTL или IOCTL, отправленный драйверу мини-перенаправления сети из пользовательского режима, RDBSSS создает RX_CONTEXT структуру и передает этот вызов в MRxLowIOSubmit[LOWIO_OP_FSCTL] сети или процедуру обратного вызова MRxLowIOSubmit[LOWIO_OP_IOCTL] , определенную в структуре MINIRDR_DISPATCH. Реализация этой подпрограммы обратного вызова мини-перенаправления сети распознает запрос на запуск и вызов RxStartMinirdr. Этот обычный процесс событий приведен ниже.
Приложение в пользовательском режиме выдает частный запрос FSCTL или IOCTL для запуска мини-перенаправления сети.
Драйвер ядра RDBSS получает запрос FSCTL или IOCTL от имени мини-перенаправления сети, так как RDBSS заменил точки входа драйвера для драйвера мини-перенаправления, чтобы указать на внутренние подпрограммы RDBSS. Обратите внимание, что предполагается, что мини-перенаправление сети не устанавливал RX_REGISTERMINI_FLAG_DONT_INIT_DRIVER_DISPATCH в параметре Controls при вызове RxRegisterMinirdr. Этот параметр, переданный в RxRegisterMinirdr , будет необычным и указывает, что мини-перенаправление сети не хочет, чтобы RDBSS заменял точки входа диспетчера драйвера.
RDBSS получает запрос FSCTL или IOCTL внутренне от имени перенаправления сети. Диспетчер RDBSS выделяет и инициализирует структуру RX_CONTEXT. Затем RDBSS вызывает подпрограмму MRxLowIOSubmit[LOW_OP_FSCTL] или подпрограмму MRxLowIOSubmit[LOW_OP_IOCTL] , определенную в структуре MINIRDR_DISPATCH для этого мини-перенаправления сети, передавая инициализированную структуру RX_CONTEXT в качестве параметра.
Реализация мини-перенаправления сети этой подпрограммы обратного вызова распознает частный запрос FSCTL или IOCTL для запуска и вызова RxStartMinirdr, передав указатель на структуру RX_CONTEXT, полученную из RDBSS в качестве параметра RxContext, и адрес члена RxContext RxContext в качестве параметра PostToFsp.
Так как этот вызов был инициирован из пользовательского режима, RxStartMinirdr вернет STATUS_PENDING и присвоит PostToFsp значение TRUE.
Подпрограмма мини-перенаправления сети MRxLowIOSubmit[LOW_OP_FSCTL] или подпрограмма MRxLowIOSubmit[LOW_OP_IOCTL] получит это возвращаемое значение и передает его обратно диспетчеру RDBSS.
Диспетчер RDBSS получит STATUS_PENDING возвращаемое значение и присвоит PostToFsp значение TRUE, а затем будет отправлять запрос в рабочий поток для повторного выполнения вызова мини-перенаправления сети.
После этого есть два возможных результата на основе того, запрашивается ли FSCTL или IOCTL в качестве асинхронной или синхронной операции.
Если это был асинхронный запрос, произойдет следующее:
- Вызывающий объект в пользовательском режиме получит STATUS_PENDING ответ от вызова. Опубликованный рабочий поток в конечном итоге вызовет RxStartMinirdr из потока файловой системы и вызов будет обработан. Подпрограмма RxStartMinirdr попытается зарегистрировать мини-перенаправление сети в качестве поставщика UNC, если он запрошен. В версиях Windows до Windows Vista RDBSS будет пытаться зарегистрировать мини-перенаправление сети в качестве файловой системы в диспетчере ввода-вывода. Если эти вызовы выполнены успешно, RxStartMinirdr вызывает подпрограмму обратного вызова MrxStart , реализованную мини-перенаправлением сети. Возвращаемое значение из MrxStart в конечном итоге будет возвращено в приложение пользовательского режима, которое инициировало процесс последовательности вызовов в качестве асинхронной операции.
Если это был синхронный запрос, произойдет следующее:
- Вызывающий пользователь не получит STATUS_PENDING ответ, но будет вынужден ждать, пока вызов не вернулся из размещенного рабочего потока. Опубликованный рабочий поток в конечном итоге вызовет RxStartMinirdr из потока файловой системы и вызов будет обработан. Подпрограмма RxStartMinirdr попытается зарегистрировать мини-перенаправление сети в качестве поставщика UNC, если он запрошен. В версиях Windows до Windows Vista RDBSS будет пытаться зарегистрировать мини-перенаправление сети в качестве файловой системы в диспетчере ввода-вывода. Если эти вызовы выполнены успешно, RxStartMinirdr вызывает подпрограмму обратного вызова MrxStart , реализованную мини-перенаправлением сети. Возвращаемое значение из MrxStart будет возвращено в приложение пользовательского режима, которое инициировало процесс последовательности вызовов.
Если сетевой мини-перенаправление указывает на UNC при регистрации в RDBSS (параметр Controls в RxRegisterMinirdr), то RxStartMinirdr попытается зарегистрировать параметр DeviceName сетевого мини-перенаправления в качестве поставщика UNC с помощью MUP (RDBSS вызывает FsRtlRegisterUncProvider от имени сетевого мини-перенаправления).
В версиях Windows до Windows Vista RxStartMinirdr регистрирует файловую систему с помощью диспетчера ввода-вывода (RDBSS вызывает IoRegisterFileSystem от имени мини-перенаправления сети).
Если вызовы выполняются успешно, RxStartMinirdr вызывает подпрограмму mrxStart сетевого мини-перенаправления. Если MrxStart возвращает успех, для внутреннего состояния мини-перенаправления в RDBSS задано значение RDBSS_STARTED. Элемент StartStopContext.Version объекта устройства мини-перенаправления также будет добавлен.
Последовательность запуска для RDBSS и мини-перенаправления сети должна быть завершена в контексте системного процесса, если запрашивается асинхронная операция. Если вызов RxStartMinirdr поступает из процесса пользовательского режима (например, запроса на обслуживание в режиме пользователя), то запрос будет помещен в рабочую очередь RDBSS в рабочую очередь для последующей обработки и STATUS_PENDING будет возвращен, а параметр PostToFsp будет иметь значение TRUE. Кроме того, если некоторые внутренние блокировки RDBSS не могут быть получены без ожидания, возвращается STATUS_PENDING, а PostToFsp имеет значение TRUE. При возврате STATUS_PENDING rxStartMinirdr будет вызываться снова из системного процесса. Если для асинхронной операции задан запрос FSCTL или IOCTL, инициирующий вызов RxStartMinirdr , RDBSS будет возвращать STATUS_PENDING резервное копирование цепочки вызовов в исходный запрос FSCTL или IOCTL из пользовательского режима. В отличие от этого, если запрос FSCTL или IOCTL был для синхронной операции, вызов также будет размещен в рабочем потоке для последующего выполнения, но вызов FSCTL или IOCTL не вернется в пользовательский режим, пока RxStartMinirdr не будет выполнен в контексте процесса файловой системы. В этом случае вызывающий объект FSCTL или IOCTL никогда не увидит возврат STATUS_PENDING ошибки. Более типичное поведение — инициировать синхронный запрос для этих операций запуска и остановки, чтобы упростить код приложения в пользовательском режиме.
При ненормальном завершении или другом сбое RxStartMinirdr попытается отменить эти операции, включая отмену регистрации поставщика UNC с помощью MUP, отмену регистрации файловой системы, освобождение памяти, выделенной для хранения доменного имени, используемого трансляциями mailslot, и обновление внутренних таблиц RDBSS.
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | Рабочий стол |
| Header | mrx.h (include Mrx.h) |
| IRQL | <= APC_LEVEL |
См. также
MRxLowIOSubmit[LOWIO_OP_FSCTL]
MRxLowIOSubmit[LOWIO_OP_IOCTL]