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


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

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

Синтаксис

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK];

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

Параметры

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

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

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

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

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

STATUS_INSUFFICIENT_RESOURCES

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

STATUS_INVALID_BUFFER_SIZE

Запрошенный размер буфера был слишком велик.

STATUS_INVALID_NETWORK_RESPONSE

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

STATUS_INVALID_PARAMETER

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

STATUS_LINK_FAILED

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

STATUS_NOT_IMPLEMENTED

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

STATUS_SHARING_VIOLATION

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

STATUS_UNSUCCESSFUL

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

Комментарии

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

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

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

Для элемента 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_SHAREDLOCK] может занять много времени, драйвер сетевого мини-перенаправления должен освободить структуру FCB, прежде чем инициировать сетевое взаимодействие. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx. Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] , элемент LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, инициирующего операцию в RDBSS.

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

Требования

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

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

Заголовок

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

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

MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]

MRxLowIOSubmit[LOWIO_OP_FSCTL]

MRxLowIOSubmit[LOWIO_OP_IOCTL]

MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]

MRxLowIOSubmit[LOWIO_OP_READ]

MRxLowIOSubmit[LOWIO_OP_UNLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]

MRxLowIOSubmit[LOWIO_OP_WRITE]

RxReleaseFcbResourceForThreadInMRx