Подпрограмма 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_UNLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]