Compartir a través de


Rutina MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]

RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] para solicitar que un minidirector de red abra un bloqueo exclusivo en un objeto de archivo.

Sintaxis

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK];

NTSTATUS MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK](
  _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_EXCLUSIVELOCK] 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 desconectó.

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_EXCLUSIVELOCK] en respuesta a recibir una solicitud de IRP_MJ_LOCK_CONTROL con un código menor de IRP_MN_LOCK si IrpSp-Flags> tiene establecido el bit SL_EXCLUSIVE_LOCK.

Antes de llamar a MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], 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_EXCLUSIVELOCK.

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

El miembro LowIoContext.ParamsFor.Locks.ByteOffset se establece en el valor de IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

El miembro LowIoContext.ParamsFor.Locks.Key se establece en el valor de IrpSp-Parameters.LockControl.Key>.

El miembro LowIoContext.ParamsFor.Locks.Flags se establece en el valor de IrpSp-Flags>.

El miembro LowIoContext.ParamsFor.Locks.Length se establece en el valor de IrpSp-Parameters.LockControl.Length.QuadPart>.

El miembro LowIoContext.Operation de la estructura 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 este 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 esa 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_EXCLUSIVELOCK] 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_EXCLUSIVELOCK], 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_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_UNLOCK_MULTIPLE]

MRxLowIOSubmit[LOWIO_OP_WRITE]

RxReleaseFcbResourceForThreadInMRx