Compartilhar via


Rotina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]

A rotina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] é chamada pelo RDBSS para solicitar que o minidiretório de rede remova vários bloqueios mantidos em um objeto de arquivo.

Sintaxe

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE];

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

Parâmetros

RxContext [in, out]
Um ponteiro para a estrutura RX_CONTEXT. Esse parâmetro contém o IRP que está solicitando a operação.

Retornar valor

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] retorna STATUS_SUCCESS em caso de êxito ou um valor NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_CONNECTION_DISCONNECTED

A conexão foi desconectada.

STATUS_INSUFFICIENT_RESOURCES

Não havia recursos suficientes para concluir a solicitação.

STATUS_INVALID_NETWORK_RESPONSE

Uma resposta inválida foi recebida do servidor remoto.

STATUS_INVALID_PARAMETER

Um parâmetro inválido foi especificado em RxContext.

STATUS_LINK_FAILED

Falha na tentativa de reconectar-se a um servidor remoto para concluir a solicitação.

STATUS_NOT_IMPLEMENTED

Essa rotina não é implementada.

STATUS_SHARING_VIOLATION

Ocorreu uma violação de compartilhamento.

STATUS_UNSUCCESSFUL

A chamada não foi bem-sucedida.

Comentários

O RDBSS chama MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] em resposta ao recebimento de uma solicitação de IRP_MJ_LOCK_CONTROL com um código secundário de IRP_MN_UNLOCK_ALL ou IRP_MN_UNLOCK_ALL_BY_KEY.

Antes de chamar MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], o RDBSS modifica os seguintes membros na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

O membro LowIoContext.Operation é definido como LOWIO_OP_UNLOCK_MULTIPLE.

O membro LowIoContext.ResourceThreadId é definido como o thread do processo que iniciou a operação no RDBSS.

O membro LowIoContext.ParamsFor.Locks.LockList é definido como uma lista de elementos LOWIO_LOCK_LIST. Cada elemento especifica um intervalo a ser desbloqueado.

Os intervalos de bytes a serem desbloqueados são especificados no membro LowIoContext.ParamsFor.Locks.LockList da estrutura RX_CONTEXT. A estrutura LOWIO_LOCK_LIST é a seguinte:

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;

O membro LowIoContext.Operation de RX_CONTEXT especifica a operação de E/S baixa a ser executada. É possível que várias das rotinas de E/S baixas apontem para a mesma rotina em um minidiretório de rede porque o membro LowIoContext.Operation pode ser usado para diferenciar a operação de E/S baixa solicitada. Por exemplo, todas as chamadas de E/S relacionadas a bloqueios de arquivo poderiam chamar a mesma rotina de E/S baixa no minidiretório de rede e essa rotina poderia usar o membro LowIoContext.Operation para diferenciar entre a operação de bloqueio e desbloqueio solicitada.

Se a rotina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] puder levar muito tempo para ser concluída, o driver de minidiretório de rede deverá liberar a estrutura FCB antes de iniciar a comunicação de rede. A estrutura FCB pode ser liberada chamando RxReleaseFcbResourceForThreadInMRx. Enquanto a rotina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] está sendo processada, o membro LowIoContext.ResourceThreadId do RX_CONTEXT é garantido para indicar o thread do processo que iniciou a operação no RDBSS.

O membro LowIoContext.ResourceThreadId de RX_CONTEXT pode ser usado para liberar a estrutura FCB em nome de outro thread. Quando uma rotina assíncrona é concluída, a estrutura FCB adquirida do thread inicial pode ser liberada.

Requisitos

Plataforma de destino

Área de Trabalho

parâmetro

Mrx.h (inclua Mrx.h)

Confira também

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