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