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