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


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

RDBSS вызывает подпрограмму MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], чтобы запросить, чтобы сетевой мини-перенаправитель открыл монопольную блокировку объекта файла.

Синтаксис

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK];

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

Параметры

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

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

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

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

Подключение было отключено.

STATUS_INSUFFICIENT_RESOURCES

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

STATUS_INVALID_NETWORK_RESPONSE

От удаленного сервера получен недопустимый ответ.

STATUS_INVALID_PARAMETER

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

STATUS_LINK_FAILED

Попытка повторно подключиться к удаленному серверу для выполнения запроса завершилась сбоем.

STATUS_NOT_IMPLEMENTED

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

STATUS_SHARING_VIOLATION

Произошло нарушение общего доступа.

STATUS_UNSUCCESSFUL

Звонок не увенчался успехом.

Комментарии

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] в ответ на получение запроса IRP_MJ_LOCK_CONTROL с незначительным кодом IRP_MN_LOCK если в IrpSp-Flags> задан бит SL_EXCLUSIVE_LOCK.

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

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

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

Член LowIoContext.ParamsFor.Locks.ByteOffset имеет значение IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Член LowIoContext.ParamsFor.Locks.Key имеет значение IrpSp-Parameters.LockControl.Key>.

Члену LowIoContext.ParamsFor.Locks.Flags присваивается значение IrpSp-Flags>.

Для элемента LowIoContext.ParamsFor.Locks.Length задано значение IrpSp-Parameters.LockControl.Length.QuadPart>.

Элемент LowIoContext.Operation структуры RX_CONTEXT указывает выполняемую операцию ввода-вывода с низким уровнем. Некоторые подпрограммы с низким уровнем ввода-вывода могут указывать на одну и ту же подпрограмму в мини-перенаправлении сети, так как этот член LowIoContext.Operation можно использовать для дифференцировки запрашиваемой операции ввода-вывода с низким уровнем. Например, все вызовы ввода-вывода, связанные с блокировкой файлов, могут вызывать одну и ту же подпрограмму низкого уровня ввода-вывода в сетевом мини-перенаправлении, а эта подпрограмма может использовать член LowIoContext.Operation для различения запрошенных операций блокировки и разблокировки.

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

Элемент LowIoContext.ResourceThreadId RX_CONTEXT можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из начального потока.

Требования

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

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

Заголовок

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

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

MRxLowIOSubmit[LOWIO_OP_FSCTL]

MRxLowIOSubmit[LOWIO_OP_IOCTL]

MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]

MRxLowIOSubmit[LOWIO_OP_READ]

MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]

MRxLowIOSubmit[LOWIO_OP_WRITE]

RxReleaseFcbResourceForThreadInMRx