MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 例程

RDBSS 调用 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 例程,以请求网络微型重定向程序删除对文件对象持有的多个锁。

语法

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_MN_UNLOCK_ALL或IRP_MN_UNLOCK_ALL_BY_KEY 次要代码的IRP_MJ_LOCK_CONTROL请求。

在调用 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]之前,RDBSS 会修改 RxContext 参数指向的 RX_CONTEXT 结构中的以下成员:

LowIoContext.Operation 成员设置为 LOWIO_OP_UNLOCK_MULTIPLE。

LowIoContext.ResourceThreadId 成员设置为在 RDBSS 中启动操作的进程线程。

LowIoContext.ParamsFor.Locks.LockList 成员设置为LOWIO_LOCK_LIST元素的列表。 每个元素指定要解锁的范围。

要解锁的字节范围在 RX_CONTEXT 结构的 LowIoContext.ParamsFor.Locks.LockList 成员中指定。 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;

RX_CONTEXT 的 LowIoContext.Operation 成员指定要执行的低 I/O 操作。 多个低 I/O 例程可能指向网络微型重定向器中的同一例程,因为 LowIoContext.Operation 成员可用于区分请求的低 I/O 操作。 例如,与文件锁相关的所有 I/O 调用都可以在网络微型重定向器中调用相同的低 I/O 例程,并且此例程可以使用 LowIoContext.Operation 成员来区分所请求的锁定和解锁操作。

如果 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 例程可能需要很长时间才能完成,则网络微型重定向程序驱动程序应在启动网络通信之前释放 FCB 结构。 可以通过调用 RxReleaseFcbResourceForThreadInMRx 来释放 FCB 结构。 在处理 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 例程时,RX_CONTEXT 的 LowIoContext.ResourceThreadId 成员保证指示在 RDBSS 中启动操作的进程线程。

可以使用 RX_CONTEXT 的 LowIoContext.ResourceThreadId 成员代表另一个线程释放 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