Rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]

RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] para solicitar que el minidirector de red quite varios bloqueos mantenidos en un objeto de archivo.

Sintaxis

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE];

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

Parámetros

RxContext [in, out]
Puntero a la estructura RX_CONTEXT. Este parámetro contiene el IRP que solicita la operación.

Valor devuelto

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] devuelve STATUS_SUCCESS si se ejecuta correctamente o un valor NTSTATUS adecuado, como uno de los siguientes:

Código devuelto Descripción
STATUS_CONNECTION_DISCONNECTED

La conexión se desconecta.

STATUS_INSUFFICIENT_RESOURCES

No había recursos suficientes para completar la solicitud.

STATUS_INVALID_NETWORK_RESPONSE

Se recibió una respuesta no válida del servidor remoto.

STATUS_INVALID_PARAMETER

Se especificó un parámetro no válido en RxContext.

STATUS_LINK_FAILED

Error al intentar volver a conectarse a un servidor remoto para completar la solicitud.

STATUS_NOT_IMPLEMENTED

Esta rutina no se implementa.

STATUS_SHARING_VIOLATION

Se ha producido una infracción de uso compartido.

STATUS_UNSUCCESSFUL

La llamada no se realizó correctamente.

Comentarios

RDBSS llama a MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] en respuesta a recibir una solicitud de IRP_MJ_LOCK_CONTROL con un código menor de IRP_MN_UNLOCK_ALL o IRP_MN_UNLOCK_ALL_BY_KEY.

Antes de llamar a MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :

El miembro LowIoContext.Operation se establece en LOWIO_OP_UNLOCK_MULTIPLE.

El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.

El miembro LowIoContext.ParamsFor.Locks.LockList se establece en una lista de LOWIO_LOCK_LIST elementos. Cada elemento especifica un intervalo que se va a desbloquear.

Los intervalos de bytes que se van a desbloquear se especifican en el miembro LowIoContext.ParamsFor.Locks.LockList de la estructura RX_CONTEXT. La estructura LOWIO_LOCK_LIST es la siguiente:

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;

El miembro LowIoContext.Operation de RX_CONTEXT especifica la operación de E/S baja que se va a realizar. Es posible que varias de las rutinas de E/S bajas apunten a la misma rutina en un minidirector de red porque el miembro LowIoContext.Operation se puede usar para diferenciar la operación de E/S baja solicitada. Por ejemplo, todas las llamadas de E/S relacionadas con bloqueos de archivo podrían llamar a la misma rutina de E/S baja en el minidirector de red y esta rutina podría usar el miembro LowIoContext.Operation para diferenciar entre la operación de bloqueo y desbloqueo solicitada.

Si la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] puede tardar mucho tiempo en completarse, el controlador minidirector de red debe liberar la estructura FCB antes de iniciar la comunicación de red. La estructura FCB se puede liberar llamando a RxReleaseFcbResourceForThreadInMRx. Mientras se procesa la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS.

El miembro LowIoContext.ResourceThreadId de RX_CONTEXT se puede usar para liberar la estructura FCB en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar la estructura FCB adquirida a partir del subproceso inicial.

Requisitos

Plataforma de destino

Escritorio

Encabezado

Mrx.h (incluya Mrx.h)

Consulte también

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