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