MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] routine

The MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] routine is called by RDBSS to request that the network mini-redirector remove multiple locks held on a file object.

Syntax

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE];

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

Parameters

RxContext [in, out]
A pointer to the RX_CONTEXT structure. This parameter contains the IRP that is requesting the operation.

Return value

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] returns STATUS_SUCCESS on success or an appropriate NTSTATUS value, such as one of the following:

Return code Description
STATUS_CONNECTION_DISCONNECTED

The connection was disconnected.

STATUS_INSUFFICIENT_RESOURCES

There were insufficient resources to complete the request.

STATUS_INVALID_NETWORK_RESPONSE

An invalid response was received from the remote server.

STATUS_INVALID_PARAMETER

An invalid parameter was specified in RxContext.

STATUS_LINK_FAILED

The attempt to reconnect to a remote server to complete the request failed.

STATUS_NOT_IMPLEMENTED

This routine is not implemented.

STATUS_SHARING_VIOLATION

A sharing violation occurred.

STATUS_UNSUCCESSFUL

The call was unsuccessful.

Remarks

RDBSS calls MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] in response to receiving an IRP_MJ_LOCK_CONTROL request with a minor code of IRP_MN_UNLOCK_ALL or IRP_MN_UNLOCK_ALL_BY_KEY.

Before calling MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], RDBSS modifies the following members in the RX_CONTEXT structure pointed to by the RxContext parameter:

The LowIoContext.Operation member is set to LOWIO_OP_UNLOCK_MULTIPLE.

The LowIoContext.ResourceThreadId member is set to the thread of the process that initiated the operation in RDBSS.

The LowIoContext.ParamsFor.Locks.LockList member is set to a list of LOWIO_LOCK_LIST elements. Each element specifies a range to be unlocked.

The byte ranges to be unlocked are specified in the LowIoContext.ParamsFor.Locks.LockList member of the RX_CONTEXT structure. The LOWIO_LOCK_LIST structure is as follows:

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;

The LowIoContext.Operation member of RX_CONTEXT specifies the low I/O operation to perform. It is possible for several of the low I/O routines to point to the same routine in a network mini-redirector because the LowIoContext.Operation member can be used to differentiate the low I/O operation that is requested. For example, all the I/O calls related to file locks could call the same low I/O routine in the network mini-redirector and this routine could use the LowIoContext.Operation member to differentiate between the lock and unlock operation that is requested.

If the MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] routine can take a long time to complete, the network mini-redirector driver should release the FCB structure before initiating the network communication. The FCB structure can be released by calling RxReleaseFcbResourceForThreadInMRx. While the MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] routine is processing, the LowIoContext.ResourceThreadId member of RX_CONTEXT is guaranteed to indicate the thread of the process that initiated the operation in RDBSS.

The LowIoContext.ResourceThreadId member of RX_CONTEXT can be used to release the FCB structure on behalf of another thread. When an asynchronous routine completes, the FCB structure that was acquired from the initial thread can be released.

Requirements

Target platform

Desktop

Header

Mrx.h (include Mrx.h)

See also

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