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