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


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

Подпрограмма MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] вызывается RDBSS для запроса на удаление мини-перенаправителя сети нескольких блокировок, удерживаемых на объекте файла.

Синтаксис

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE];

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

Параметры

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

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

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] возвращает 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_UNLOCK_MULTIPLE] в ответ на получение запроса IRP_MJ_LOCK_CONTROL с незначительным кодом IRP_MN_UNLOCK_ALL или IRP_MN_UNLOCK_ALL_BY_KEY.

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

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

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

Для элемента LowIoContext.ParamsFor.Locks.LockList задается список LOWIO_LOCK_LIST элементов. Каждый элемент указывает диапазон для разблокировки.

Диапазоны байтов, которые необходимо разблокировать, указываются в элементе LowIoContext.ParamsFor.Locks.LockList структуры RX_CONTEXT. Структура LOWIO_LOCK_LIST выглядит следующим образом:

typedef struct _LOWIO_LOCK_LIST {
  struct  _LOWIO_LOCK_LIST  *Next;
  ULONG  LockNumber;
  RXVBO  ByteOffset;
  LONGLONG  Length;
  ULONG  Key;
  BOOLEAN  ExclusiveLock;
} LOWIO_LOCK_LIST, *PLOWIO_LOCK_LIST;

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

Если выполнение подпрограммы MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] может занять много времени, драйвер мини-перенаправления сети должен освободить структуру FCB перед началом сетевого взаимодействия. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx. Пока выполняется обработка подпрограммы MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] , элемент 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_SHAREDLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK]

MRxLowIOSubmit[LOWIO_OP_WRITE]

RxReleaseFcbResourceForThreadInMRx