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_SHAREDLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]