Compartilhar via


Rotina MRxLowIOSubmit[LOWIO_OP_UNLOCK]

A rotina MRxLowIOSubmit[LOWIO_OP_UNLOCK] é chamada pelo RDBSS para solicitar que um minidiretório de rede remova um único bloqueio em um objeto de arquivo.

Sintaxe

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_UNLOCK];

NTSTATUS MRxLowIOSubmit[LOWIO_OP_UNLOCK](
  _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] retorna STATUS_SUCCESS com ê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] em resposta ao recebimento de uma solicitação IRP_MJ_LOCK_CONTROL com um código secundário de IRP_MN_UNLOCK_SINGLE.

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

O membro LowIoContext.Operation está definido como LOWIO_OP_UNLOCK.

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

O membro LowIoContext.ParamsFor.Locks.ByteOffset é definido como o valor de IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

O membro LowIoContext.ParamsFor.Locks.Key é definido como o valor de IrpSp-Parameters.LockControl.Key>.

O membro LowIoContext.ParamsFor.Locks.Length é definido como o valor de IrpSp-Parameters.LockControl.Length.QuadPart>.

O membro LowIoContext.Operation da estrutura 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 esse 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 arquivos podem chamar a mesma rotina de E/S baixa no minidiretório de rede e essa rotina pode usar o membro LowIoContext.Operation para diferenciar entre a operação de bloqueio e desbloqueio solicitada.

Se a rotina MRxLowIOSubmit[LOWIO_OP_UNLOCK] 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] 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 do 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_MULTIPLE]

MRxLowIOSubmit[LOWIO_OP_WRITE]

RxReleaseFcbResourceForThreadInMRx