Compartilhar via


Rotina MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]

A rotina MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] é chamada pelo RDBSS para emitir uma solicitação ao minidiretório de rede para uma operação de notificação de alteração de diretório.

Sintaxe

PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY];

NTSTATUS MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY](
  _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_NOTIFY_CHANGE_DIRECTORY] retorna STATUS_SUCCESS com êxito ou um valor NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_FILE_CLOSED

A estrutura fcb foi adquirida, mas a estrutura de SRV_OPEN associada foi fechada.

STATUS_INSUFFICIENT_RESOURCES

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

STATUS_INVALID_DEVICE_REQUEST

Uma solicitação de dispositivo inválida foi especificada.

STATUS_INVALID_PARAMETER

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

STATUS_NOT_IMPLEMENTED

Essa rotina não é implementada.

STATUS_NOT_SUPPORTED

Não há suporte para a solicitação especificada pelo minidiretório de rede.

Comentários

O RDBSS chama MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] em resposta ao recebimento de uma solicitação de IRP_MJ_DIRECTORY_CONTROL .

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

O membro LowIoContext.Operation está definido como LOWIO_OP_NOTIFY_CHANGE_DIRECTORY.

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

O membro LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree será definido como TRUE se o IrpSp-Flags> tiver o SL_WATCH_TREE bit definido.

O membro LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter é definido como o valor de IrpSp-Parameters.NotifyDirectory.CompletionFilter>.

O membro LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength é definido como o valor de IrpSp-Parameters.NotifyDirectory.Length>.

O membro LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer é definido como o valor retornado chamando MmGetSystemAddressForMdlSafe passando o Irp-MdlAddress> e NormalPagePriority. O buffer de usuário também é investigado e bloqueado para acesso de gravação.

Normalmente, uma operação de notificação de alteração de diretório é implementada por um minidiretório de rede como uma operação assíncrona porque pode levar um tempo considerável. A operação geralmente consiste em enviar uma solicitação de rede para o servidor remoto solicitando notificação de alteração. A resposta é obtida quando a alteração desejada é afetada no servidor. Este é um exemplo de uma operação para a qual o minidiretório de rede pode precisar registrar um valor de contexto exclusivo para lidar com cancelamentos iniciados localmente.

Enquanto a rotina MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 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 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. A estrutura FCB pode ser liberada chamando RxReleaseFcbResourceForThreadInMRx.

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_READ]

MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK]

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]

MRxLowIOSubmit[LOWIO_OP_WRITE]

RxReleaseFcbResourceForThreadInMRx