Поделиться через


Подпрограмма MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]

Подпрограмма MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] вызывается RDBSS для выдачи запроса к сетевому мини-перенаправлению для операции уведомления об изменении каталога.

Синтаксис

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY];

NTSTATUS MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY](
  _Inout_ PRX_CONTEXT RxContext
)
{ ... }

Параметры

RxContext [in, out]
Указатель на структуру RX_CONTEXT. Этот параметр содержит IRP, запрашивающий операцию.

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

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

Код возврата Описание
STATUS_FILE_CLOSED

Структура FCB была приобретена, но связанная SRV_OPEN структура была закрыта.

STATUS_INSUFFICIENT_RESOURCES

Недостаточно ресурсов для выполнения запроса.

STATUS_INVALID_DEVICE_REQUEST

Указан недопустимый запрос устройства.

STATUS_INVALID_PARAMETER

В RxContext указан недопустимый параметр.

STATUS_NOT_IMPLEMENTED

Эта подпрограмма не реализована.

STATUS_NOT_SUPPORTED

Указанный запрос не поддерживается сетевым мини-перенаправлением.

Комментарии

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] в ответ на получение запроса IRP_MJ_DIRECTORY_CONTROL .

Перед вызовом MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_NOTIFY_CHANGE_DIRECTORY.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Элемент LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree имеет значение TRUE, если для IrpSp-Flags> задан бит SL_WATCH_TREE.

Член LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter имеет значение IrpSp-Parameters.NotifyDirectory.CompletionFilter>.

Член LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength имеет значение IrpSp-Parameters.NotifyDirectory.Length>.

Члену LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer присваивается значение, возвращаемое путем вызова MmGetSystemAddressForMdlSafe, передавая Irp-MdlAddress> и NormalPagePriority. Буфер пользователя также проверяется и блокируется для доступа на запись.

Операция уведомления об изменении каталога обычно реализуется сетевым мини-перенаправлением как асинхронная операция, так как она может занять значительное время. Операция обычно состоит в отправке сетевого запроса на удаленный сервер с запросом уведомления об изменении. Ответ получается при изменении на сервере. Это пример операции, для которой мини-перенаправлению сети может потребоваться зарегистрировать уникальное значение контекста для обработки отмен, инициированных локально.

Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] , элемент LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS. Член LowIoContext.ResourceThreadId можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из исходного потока. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx.

Требования

Целевая платформа

Персональный компьютер

Заголовок

Mrx.h (включая Mrx.h)

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

MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]

MRxLowIOSubmit[LOWIO_OP_FSCTL]

MRxLowIOSubmit[LOWIO_OP_IOCTL]

MRxLowIOSubmit[LOWIO_OP_READ]

MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]

MRxLowIOSubmit[LOWIO_OP_WRITE]

RxReleaseFcbResourceForThreadInMRx