PMRX_CALLDOWN função de retorno de chamada (mrx.h)

Esse retorno de chamada é chamado pelo RDBSS para solicitar que o minidiretório de rede execute uma ação com base no IRP fornecido.

Sintaxe

PMRX_CALLDOWN PmrxCalldown;

NTSTATUS PmrxCalldown(
  [in, out] IN OUT PRX_CONTEXT RxContext
)
{...}

Parâmetros

[in, out] RxContext

Um ponteiro para a estrutura RX_CONTEXT. Esse parâmetro contém o IRP que está solicitando a operação.

Retornar valor

Esse retorno de chamada retorna STATUS_SUCCESS em caso de êxito ou um valor NTSTATUS apropriado, como o seguinte:

Código de retorno Descrição
STATUS_ACCESS_DENIED Foi feita uma solicitação para interromper ou iniciar o minidiretório de rede, mas o chamador não tinha a segurança adequada para essa operação.
STATUS_BUFFER_OVERFLOW O buffer para receber as informações de atributo estendido era muito pequeno. Esse valor retornado deve ser considerado êxito e o máximo de dados válidos possível deve ser retornado no membro Info.Buffer da estrutura RX_CONTEXT apontada pelo parâmetro RxContext .
STATUS_BUFFER_TOO_SMALL O buffer é muito pequeno para receber os dados solicitados. Se esse valor for retornado, o membro InformationToReturn da estrutura RX_CONTEXT apontada pelo parâmetro RxContext deverá ser definido como o tamanho mínimo do buffer esperado para que a chamada seja bem-sucedida.
STATUS_CONNECTION_DISCONNECTED A conexão foi desconectada.
STATUS_EA_CORRUPT_ERROR Informações de atributo estendido inválidas foram recebidas do servidor remoto.
STATUS_EA_TOO_LARGE As informações de atributo estendido passadas são maiores do que o tamanho compatível com o compartilhamento remoto.
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 operação.
STATUS_INTERNAL_ERROR Ocorreu um erro interno no minidiretório de rede.
STATUS_INVALID_BUFFER_SIZE O tamanho do buffer solicitado era muito grande.
STATUS_INVALID_DEVICE_REQUEST Uma solicitação de dispositivo inválida foi enviada ao minidiretório de rede.
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_MORE_PROCESSING_REQUIRED Um minidiretório de rede retorna esse valor para desabilitar o recolhimento dessa solicitação aberta.
STATUS_NETWORK_ACCESS_DENIED O acesso à rede foi negado. Esse erro poderá ser retornado se o minidiretório de rede for solicitado a abrir um novo arquivo em um compartilhamento somente leitura.
STATUS_NETWORK_NAME_DELETED Um nome de rede foi excluído.
STATUS_NONEXISTENT_EA_ENTRY Não há atributos estendidos no objeto de arquivo e o usuário forneceu um índice de atributo estendido.
STATUS_NOT_IMPLEMENTED Um recurso solicitado, como inicialização remota ou um arquivo de página remota, não é implementado.
STATUS_NOT_SUPPORTED Não há suporte para um recurso solicitado, como atributos estendidos.
STATUS_OBJECT_NAME_COLLISION O minidiretório de rede foi solicitado a criar um arquivo que já existe.
STATUS_OBJECT_NAME_NOT_FOUND O nome do objeto não foi encontrado. Esse erro poderá ser retornado se o minidiretório de rede for solicitado a abrir um arquivo que não existe.
STATUS_OBJECT_PATH_NOT_FOUND O caminho do objeto não foi encontrado. Esse erro poderá ser retornado se um objeto de fluxo NTFS tiver sido solicitado e o sistema de arquivos remoto não oferecer suporte a fluxos.
STATUS_ONLY_IF_CONNECTED A estrutura SRV_OPEN não está conectada.
STATUS_REDIRECTOR_HAS_OPEN_HANDLES Essa foi uma solicitação para interromper o minidiretório de rede, mas o redirecionador tem identificadores abertos que o impedem de parar no momento.
STATUS_REDIRECTOR_NOT_STARTED Essa foi uma solicitação para interromper o minidiretório de rede, mas o redirecionador não foi iniciado.
STATUS_REDIRECTOR_STARTED Essa foi uma solicitação para iniciar o minidiretório de rede, mas o redirecionador já foi iniciado.
STATUS_REPARSE Uma nova análise é necessária para lidar com um link simbólico.
STATUS_REQUEST_ABORTED A solicitação de rede foi anulada.
STATUS_RETRY A operação deve ser repetida. Esse erro poderá ser retornado se o minidiretório de rede encontrar uma violação de compartilhamento ou um erro de acesso negado.
STATUS_SHARING_VIOLATION Ocorreu uma violação de compartilhamento.
STATUS_UNSUCCESSFUL A chamada não foi bem-sucedida.

Comentários

A rotina MRxCloseSrvOpen é chamada pelo RDBSS para solicitar que o minidiretório de rede feche uma estrutura SRV_OPEN.

MRxCloseSrvOpen é chamado pelo RDBSS como parte das operações de limpeza e fechamento em um objeto de arquivo. Supõe-se que o minidiretório de rede fechará um arquivo em toda a rede.

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

MajorFunction está definido como IRP_MJ_CLOSE

pFcb é definido como a estrutura FCB para a qual o processamento de fechamento deve ser iniciado

pFobx é definido como a estrutura FOBX para a qual o processamento de fechamento deve ser iniciado

O RDBSS e um minidiretório de rede não necessariamente fecham as estruturas de SRV_OPEN quando o usuário fecha um arquivo. Para melhorar o desempenho em alguns casos, um minidiretório de rede pode tentar reutilizar o SRV_OPEN e os dados armazenados em cache sem nenhum contato com o servidor. Alguns aplicativos do Microsoft Windows exibem um comportamento que abre, lê e fecha um arquivo e, em seguida, reabre rapidamente o mesmo arquivo. Nesses casos, reutilização das estruturas de SRV_OPEN pode melhorar o desempenho.

O RDBSS chama MRxCloseSrvOpen para processamento de fechamento atrasado durante a limpeza de uma estrutura FOBX. Isso acontece quando o processamento de fechamento foi adiado em antecipação a uma solicitação aberta e nenhuma solicitação aberta estava por vir.

MRxCloseSrvOpen não pode retornar um valor de STATUS_RETRY indicando que a chamada deve ser repetida. Se um loop de repetição for necessário, ele deverá ser tratado internamente na rotina MRxCloseSrvOpen pelo minidiretório de rede.

A rotina MRxCollapseOpen é chamada pelo RDBSS para solicitar que o minidiretório de rede recolha uma solicitação do sistema de arquivos aberto em uma estrutura de SRV_OPEN existente.

MRxCollapseOpen é chamado pelo RDBSS para recolher uma estrutura de SRV_OPEN localmente. O minidiretório de rede é consultado para determinar se um colapso é possível, portanto, não há motivo para chamar o minidiretório de rede duas vezes. Se o minidiretório de rede decidir recolher a estrutura SRV_OPEN, ele fará isso e passará um status retornável. Um valor retornado de STATUS_SUCCESS é um valor retornado de encerramento. Um valor retornado diferente, por exemplo, STATUS_MORE_PROCESSING_REQUIRED, é considerado um valor retornado que não termina.

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

pRelevantSrvOpen é definido como a estrutura SRV_OPEN a ser recolhida.

Create.pSrvCall é definido como a estrutura SRV_CALL associada ao SRV_OPEN.

Se o minidiretório de rede decidir recolher a estrutura SRV_OPEN, o membro SrvOpen da estrutura RX_CONTEXT deverá ser definido como a estrutura de SRV_OPEN recolhida.

A rotinaMRxCreate é chamada pelo RDBSS para solicitar que o minidiretório de rede crie um objeto do sistema de arquivos.

MRxCreate é chamado pelo RDBSS para solicitar que o minidiretório de rede abra um objeto do sistema de arquivos em toda a rede. Essa chamada é emitida pelo RDBSS em resposta ao recebimento de uma solicitação de IRP_MJ_CREATE .

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

pRelevantSrvOpen é definido como a estrutura SRV_OPEN.

Create.pSrvCall é definido como a estrutura SRV_CALL.

Create.NtCreateParameters é definido como o NT_CREATE_PARAMETERS solicitado.

No contexto de um minidiretório de rede, um objeto de arquivo refere-se às estruturas FCB (bloco de controle de arquivo) e FOBX (extensão de objeto de arquivo) associadas. Há uma correspondência de um para um entre objetos de arquivo e FOBXs. Muitos objetos de arquivo se referirão ao mesmo FCB, que representa um único arquivo em um servidor remoto. Um cliente pode ter várias solicitações abertas diferentes (solicitações NtCreateFile) no mesmo FCB e cada uma delas criará um novo objeto de arquivo. RdBSS e minidiretórios de rede podem optar por enviar menos solicitações MRxCreate do que as solicitações NtCreateFile recebidas, compartilhando de fato uma estrutura de SRV_OPEN entre vários FOBXs.

Se a solicitação MRxCreate for para uma substituição de arquivo e MRxCreate retornar STATUS_SUCCESS, o RDBSS adquirirá o recurso de E/S de paginação e truncará o arquivo. Se o arquivo estiver sendo armazenado em cache pelo gerenciador de cache, o RDBSS atualizará os tamanhos que o gerenciador de cache tem com os que acabaram de receber do servidor.

Antes de retornar, MRxCreate deve definir o membro CurrentIrp-IoStatus.Information> da estrutura RX_CONTEXT apontada pelo parâmetro RxContext.

A rotina MRxDevFcbXXXControlFile é chamada pelo RDBSS para passar uma solicitação de controle FCB do dispositivo (uma solicitação IOCTL ou FSCTL) para o minidiretório de rede.

MRxDevFcbXXXControlFile manipula solicitações IOCTL e FSCTL relacionadas ao FCB do dispositivo que são enviadas para o minidiretório de rede.

Antes de chamar MRxDevFcbXXXControlFile, o RDBSS modifica o seguinte membro na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

MajorFunction é definido como a função principal do IRP

Se essa for uma solicitação IRP_MJ_FILE_SYSTEM_CONTROL, o RDBSS modificará os seguintes membros na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

LowIoContext.ParamsFor.FsCtl.MinorFunction é definido como o código de função secundária para o código FSCTL

LowIoContext.ParamsFor.FsCtl.FsControlCode é definido como o código FSCTL para o IRP

Se essa for uma solicitação IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL, o RDBSS modificará o seguinte membro na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

LowIoContext.ParamsFor.FsCtl.FsControlCode é definido como o código de controle do IRP.

Se MRxDevFcbXXXControlFile retornar STATUS_SUCCESS, a rotina foi bem-sucedida. Qualquer outro valor retornado indica que ocorreu um erro.

A rotina MRxFlush é chamada pelo RDBSS para solicitar que um minidiretório de rede escreva o conteúdo de um objeto do sistema de arquivos no armazenamento. O RDBSS emite essa chamada em resposta ao recebimento de uma solicitação de IRP_MJ_FLUSH_BUFFERS .

O MRxFlush lida com solicitações de rede para liberação de arquivos.

A rotina MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] é chamada pelo RDBSS para solicitar que um minidiretório de rede abra um bloqueio exclusivo em um objeto de arquivo.

O RDBSS chama MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] em resposta ao recebimento de uma solicitação de IRP_MJ_LOCK_CONTROL com um código secundário de IRP_MN_LOCK se IrpSp-Flags> tiver o SL_EXCLUSIVE_LOCK bit definido.

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

O membro LowIoContext.Operation está definido como LOWIO_OP_EXCLUSIVELOCK.

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.Flags é definido como o valor de IrpSp-Flags>.

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 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_EXCLUSIVELOCK] 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_EXCLUSIVELOCK] 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.

A rotina MRxLowIOSubmit[LOWIO_OP_FSCTL] é chamada pelo RDBSS para solicitar que um minidiretório de rede emita a solicitação de controle do sistema de arquivos no arquivo remoto.

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

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

O membro LowIoContext.Operation está definido como LOWIO_OP_FSCTL.

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

O membro LowIoContext.ParamsFor.FsCtl.FsControlCode é definido como o código de controle principal FSCTL.

O membro LowIoContext.ParamsFor.FsCtl.MinorFunction é definido como o código de controle secundário FSCTL.

O membro LowIoContext.ParamsFor.FsCtl.pInputBuffer é definido como o buffer de entrada.

O membro LowIoContext.ParamsFor.FsCtl.InputBufferLength é definido como o comprimento do buffer de entrada.

O membro LowIoContext.ParamsFor.FsCtl.pOutputBuffer é definido como o buffer de saída.

O membro LowIoContext.ParamsFor.FsCtl.OutputBufferLength é definido como o comprimento do buffer de saída.

As solicitações de FSCTL (código de controle do sistema de arquivos) manipuladas por um minidiretório de rede podem ser classificadas em uma das várias categorias:

  • FSCTLs que são implementados e usados pelo RDBSS e pelo minidiretório de rede

  • FSCTLs que são implementados e usados apenas pelo minidiretório de rede

  • FSCTLs que nunca devem ser vistos pelo minidiretório de rede. Essas FSCTLs são destinadas exclusivamente como um auxílio de depuração.

Enquanto a rotina MRxLowIOSubmit[LOWIO_OP_FSCTL] 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 o recurso de entrada em nome de outro thread. Quando uma rotina assíncrona é concluída, o recurso de entrada adquirido do thread inicial pode ser liberado.

A rotina MRxLowIOSubmit[LOWIO_OP_IOCTL] é chamada pelo RDBSS para emitir uma solicitação de controle do sistema de E/S para o minidiretório de rede.

O RDBSS chama MRxLowIOSubmit[LOWIO_OP_IOCTL] em resposta ao recebimento de uma IRP_MJ_DEVICE_CONTROL ou solicitações de IRP_MJ_INTERNAL_DEVICE_CONTROL .

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

O membro LowIoContext.Operation é definido como LOWIO_OP_IOCTL.

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

O membro LowIoContext.ParamsFor.IoCtl.IoControlCode é definido como o código de controle IOCTL.

O membro LowIoContext.ParamsFor.IoCtl.pInputBuffer é definido como o buffer de entrada.

O membro LowIoContext.ParamsFor.IoCtl.InputBufferLength é definido como o comprimento do buffer de entrada.

O membro LowIoContext.ParamsFor.IoCtl.pOutputBuffer é definido como o buffer de saída.

O membro LowIoContext.ParamsFor.IoCtl.OutputBufferLength é definido como o comprimento do buffer de saída.

Enquanto a rotina MRxLowIOSubmit[LOWIO_OP_IOCTL] 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 o recurso de entrada em nome de outro thread. Quando uma rotina assíncrona é concluída, o recurso de entrada adquirido do thread inicial pode ser liberado.

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.

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 é 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 irp-MdlAddress> e NormalPagePriority. O buffer do usuário também é investigado e bloqueado para acesso de gravação.

Uma operação de notificação de alteração de diretório normalmente é 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.

A rotina MRxLowIOSubmit[LOWIO_OP_READ] é chamada pelo RDBSS para emitir uma solicitação de leitura para o minidiretório de rede.

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

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

O membro LowIoContext.Operation é definido como LOWIO_OP_READ.

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

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

O membro ParamsFor.ReadWrite.Flags tem o LOWIO_READWRITEFLAG_PAGING_IO bit será definido se Irp-Flags> tiver o IRP_PAGING_IO bit ativado.

O membro ParamsFor.ReadWrite.Buffer é definido como o buffer de usuário bloqueado para IoReadAccess.

O membro LowIoContext.ParamsFor.ReadWrite.ByteCount é definido como o valor de IrpSp-Parameters.Read.Length>.

Uma solicitação de leitura normalmente é 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. A resposta é obtida quando a solicitação de leitura é concluída no servidor. Este é um exemplo de uma operação para a qual o minidiretório de rede pode precisar registrar um contexto para lidar com cancelamentos iniciados localmente.

Enquanto a rotina MRxLowIOSubmit[LOWIO_OP_READ] 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.

A rotina MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] é chamada pelo RDBSS para solicitar que um redirecionador de rede abra um bloqueio compartilhado em um objeto de arquivo.

O RDBSS chama MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] em resposta ao recebimento de uma solicitação de IRP_MJ_LOCK_CONTROL com um código secundário de IRP_MN_LOCK se IrpSp-Flags> não tiver o SL_EXCLUSIVE_LOCK bit definido.

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

O membro LowIoContext.Operation é definido como LOWIO_OP_SHAREDLOCK.

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.Flags é definido como o valor de IrpSp-Flags>.

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 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_SHAREDLOCK] 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_SHAREDLOCK] 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 da estrutura 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.

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.

O RDBSS chama MRxLowIOSubmit[LOWIO_OP_UNLOCK] em resposta ao recebimento de uma solicitação de 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 é 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 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] 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 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.

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.

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.

A rotina MRxLowIOSubmit[LOWIO_OP_WRITE] é chamada pelo RDBSS para emitir uma solicitação de gravação para o minidiretório de rede.

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

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

O membro LowIoContext.Operation é definido como LOWIO_OP_WRITE.

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

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

O membro ParamsFor.ReadWrite.Flags tem o LOWIO_READWRITEFLAG_PAGING_IO bit será definido se Irp-Flags> tiver o IRP_PAGING_IO bit ativado.

O membro ParamsFor.ReadWrite.Buffer é definido como o buffer de usuário bloqueado para IoWriteAccess.

O membro LowIoContext.ParamsFor.ReadWrite.ByteCount é definido como o valor de IrpSp-Parameters.Write.Length>.

Uma solicitação de gravação normalmente é 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. A resposta é obtida quando a solicitação de gravação é concluída no servidor. Este é um exemplo de uma operação para a qual o minidiretório de rede pode precisar registrar um contexto para lidar com cancelamentos iniciados localmente.

Enquanto a rotina MRxLowIOSubmit[LOWIO_OP_WRITE] 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.

A rotina MRxQueryDirectory é chamada pelo RDBSS para solicitar que um minidiretório de rede consulte informações sobre um diretório de arquivos.

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

O membro Info.FileInformationClass é definido como IrpSp-Parameters.QueryDirectory.FileInformationClass>.

O membro Info.Buffer é definido como buffer de usuário do pacote de solicitação de E/S. Esse buffer já foi bloqueado pelo RDBSS, se necessário.

O membro Info.LengthRemaining é definido como IrpSp-Parameters.QueryDirectory.Length>.

O membro QueryDirectory.FileIndex é definido como IrpSp-Parameters.QueryDirectory.FileIndex>.

O membro QueryDirectory.RestartScan será definido como diferente de zero se IrpSp-Flags> tiver o SL_RESTART_SCAN bit ativado.

O membro QueryDirectory.ReturnSingleEntry será definido como diferente de zero se IrpSp-Flags> tiver o bit SL_RETURN_SINGLE_ENTRY ativado.

O membro QueryDirectory.IndexSpecified será definido como diferente de zero se IrpSp-Flags> tiver o SL_INDEX_SPECIFIED bit ativado.

O membro QueryDirectory.InitialQuery será definido como diferente de zero se UnicodeQueryTemplate.Buffer membro do FOBX associado for NULL e o membro Flags do FOBX não tiver o FOBX_FLAG_MATCH_ALL bit ativado.

Para uma consulta de cartão selvagem (".", por exemplo), o RDBSS definirá o membro UnicodeQueryTemplate.Buffer do FOBX associado como a consulta de cartão selvagem passada.

Se o membro PostRequest da estrutura RX_CONTEXT for TRUE no retorno de MRxQueryDirectory, o RDBSS chamará RxFsdPostRequest passando a estrutura RX_CONTEXT para uma fila de trabalho para processamento pelo processo do sistema de arquivos (FSP).

A rotina MRxQueryEaInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede consulte informações de atributo estendido em um objeto do sistema de arquivos.

O RDBSS emite uma chamada para MRxQueryEaInfo em resposta ao recebimento de uma solicitação de IRP_MJ_QUERY_EA .

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

O membro Info.Buffer é definido como o buffer de usuário do pacote de solicitação de E/S. Esse buffer já foi bloqueado pelo RDBSS, se necessário.

O membro Info.LengthRemaining é definido como IrpSp-Parameters.QueryEa.Length>.

O membro QueryEa.UserEaList está definido como IrpSp-Parameters.QueryEa.EaList>.

O membro QueryEa.UserEaListLength está definido como IrpSp-Parameters.QueryEa.EaListLength>.

O membro QueryEa.UserEaIndex está definido como IrpSp-Parameters.QueryEa.EaIndex>.

O membro QueryEa.RestartScan será definido como diferente de zero se IrpSp-Flags> tiver o bit SL_RESTART_SCAN ativado.

O membro QueryEa.ReturnSingleEntry será definido como diferente de zero se IrpSp-Flags> tiver o bit SL_RETURN_SINGLE_ENTRY ativado.

O membro QueryEa.IndexSpecified será definido como diferente de zero se IrpSp-Flags> tiver o SL_INDEX_SPECIFIED bit ativado.

Com êxito, MRxQueryEaInfo deve definir o membro Info.LengthRemaining da estrutura RX_CONTEXT para o comprimento das informações de atributo estendidas retornadas e também atualizar o membro Fobx-OffsetOfNextEaToReturn>. Se a chamada para MRxQueryEaInfo tiver sido bem-sucedida, o RDBSS definirá o membro IoStatus.Information do IRP como IrpSp-Parameters.QueryEa.Length> menos o membro Info.LengthRemaining de RX_CONTEXT.

A rotina MRxQueryFileInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede consulte informações de arquivo em um objeto do sistema de arquivos.

O RDBSS emite uma chamada para MRxQueryFileInfo em resposta ao recebimento de uma solicitação de IRP_MJ_QUERY_INFORMATION .

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

O membro Info.FileInformationClass é definido como IrpSp-Parameters.QueryFile.FileInformationClass>, o valor FILE_INFORMATION_CLASS solicitado.

O membro Info.Buffer é definido como o buffer de usuário do pacote de solicitação de E/S.

O membro Info.LengthRemaining é definido como IrpSp-Parameters.QueryFile.Length>.

O membro QueryDirectory.FileIndex está definido como IrpSp-Parameters.QueryDirectory.FileIndex>.

O membro QueryDirectory.RestartScan será definido se IrpSp-Flags> tiver o SL_RESTART_SCAN bit definido.

O membro QueryDirectory.ReturnSingleEntry será definido se IrpSp-Flags> tiver SL_RETURN_SINGLE_ENTRY conjunto de bits.

O membro QueryDirectory.InitialQuery será definido se Fobx-UnicodeQueryTemplate.Buffer> for NULL e Fobx-Flags> não tiver o FOBX_FLAG_MATCH_ALL bit definido.

Com êxito, o minidiretório de rede deve definir o membro Info.LengthRemaining da estrutura RX_CONTEXT como membro Info.Length menos o comprimento das informações de arquivo retornadas. Se a chamada para MRxQueryFileInfo tiver sido bem-sucedida, o RDBSS definirá o membro IoStatus.Information do IRP como IrpSp-Parameters.QueryFile.Length> menos o membro Info.LengthRemaining de RX_CONTEXT.

O RDBSS não dá suporte a solicitações com o bit SL_INDEX_SPECIFIED do conjunto IrpSp-Flags>. Um minidiretório de rede não receberá chamadas para MRxQueryFileInfo com o bit SL_INDEX_SPECIFIED de IrpSp-Flags> definido.

A rotina MRxQueryQuotaInfo é chamada pelo RDBSS para solicitar que uma informação de cota de consulta de minidiretório de rede em um objeto do sistema de arquivos.

O RDBSS emite uma chamada para MRxQueryQuotaInfo em resposta ao recebimento de uma solicitação de IRP_MJ_QUERY_QUOTA .

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

O membro Info.Buffer é definido como buffer de usuário do pacote de solicitação de E/S. Esse buffer já foi bloqueado pelo RDBSS, se necessário.

O membro Info.LengthRemaining é definido como IrpSp-Parameters.QueryQuota.Length>.

O membro QueryQuota.SidList está definido como IrpSp-Parameters.QueryQuota.SidList>.

O membro QueryQuota.SidListLength está definido como IrpSp-Parameters.QueryQuota.SidListLength>.

O membro QueryQuota.StartSid está definido como IrpSp-Parameters.QueryQuota.StartSid>.

O membro QueryQuota.Length é definido como IrpSp-Parameters.QueryQuota.Length>.

O membro QueryQuota.RestartScan será definido como diferente de zero se IrpSp-Flags> tiver o SL_RESTART_SCAN bit definido.

O membro QueryQuota.ReturnSingleEntry será definido como diferente de zero se IrpSp-Flags> tiver o SL_RETURN_SINGLE_ENTRY bit definido.

O membro QueryQuota.IndexSpecified será definido como diferente de zero se IrpSp-Flags> tiver o SL_INDEX_SPECIFIED bit definido.

Com êxito, o minidiretório de rede deve definir o membro Info.LengthRemaining da estrutura RX_CONTEXT para o comprimento das informações de cota a serem retornadas. Se a chamada para MRxQueryQuotaInfo tiver sido bem-sucedida, o RDBSS definirá o membro IoStatus.Information do IRP como o membro Info.LengthRemaining do RX_CONTEXT.

Se a chamada para MRxQueryQuotaInfo for bem-sucedida, o membro InformationToReturn da estrutura RX_CONTEXT deverá ser definido como o comprimento das informações de cota retornadas. Se a chamada não for bem-sucedida, o membro InformationToReturn do RX_CONTEXT deverá ser definido como zero.

A rotina MRxQuerySdInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede consulte informações de descritor de segurança em um objeto do sistema de arquivos.

O RDBSS emite uma chamada para MRxQuerySdInfo em resposta ao recebimento de uma solicitação de IRP_MJ_QUERY_SECURITY .

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

O membro QuerySecurity.SecurityInformation está definido como IrpSp-Parameters.QuerySecurity.SecurityInformation>.

O membro Info.Buffer é definido como buffer de usuário do pacote de solicitação de E/S. Esse buffer já foi bloqueado pelo RDBSS, se necessário.

O membro Info.LengthRemaining está definido como IrpSp-Parameters.QuerySecurity.Length>.

Com êxito, o minidiretório de rede deve definir o membro InformationToReturn da estrutura RX_CONTEXT para o comprimento das informações de segurança retornadas. Se a chamada para MRxQuerySdInfo tiver sido bem-sucedida, o RDBSS definirá o membro IoStatus.Information do IRP como o membro InformationToReturn do RX_CONTEXT.

A rotina MRxQueryVolumeInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede consulte informações de volume de consulta.

O RDBSS emite uma chamada para MRxQueryVolumeInfo em qualquer um dos seguintes casos:

Antes de chamar MRxQueryVolumeInfo no caso de uma solicitação de IRP_MJ_QUERY_VOLUME_INFORMATION, o RDBSS modifica os seguintes membros na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

O membro Info.FsInformationClass é definido como IrpSp-Parameters.QueryVolume.FsInformationClass>.

O membro Info.Buffer está definido como Irp-AssociatedIrp.SystemBuffer>.

O membro Info.LengthRemaining é definido como IrpSp-Parameters.QueryVolume.Length>.

Para uma solicitação de IRP_MJ_QUERY_VOLUME_INFORMATION, se o membro PostRequest da estrutura RX_CONTEXT for TRUE no retorno de MRxQueryVolumeInfo, o RDBSS chamará RxFsdPostRequest para postar a solicitação. Para esse caso, a solicitação IRP_MJ_QUERY_VOLUME_INFORMATION passará a estrutura RX_CONTEXT para a fila RX_CONTEXT para uma fila de trabalho para processamento pelo FSP (processo do sistema de arquivos).

Se o membro PostRequest da estrutura RX_CONTEXT for FALSE no retorno de MRxQueryVolumeInfo, o minidiretório de rede deverá definir o membro Info.LengthRemaining da estrutura RX_CONTEXT para o comprimento das informações de volume retornadas. O RDBSS define o membro IoStatus.Information do IRP como IrpSp-Parameters.QueryVolume.Length> menos o membro Info.LengthRemaining da estrutura RX_CONTEXT.

Se a chamada para MRxQueryVolumeInfo for bem-sucedida, o minidiretório de rede deverá definir o membro Info.LengthRemaining da estrutura RX_CONTEXT para o membro Info.Length menos o comprimento das informações de volume retornadas. Se a chamada para MRxQueryVolumeInfo tiver sido bem-sucedida, o RDBSS definirá o membro IoStatus.Information do IRP como IrpSp-Parameters.QueryVolume.Length> menos o membro Info.LengthRemaining da estrutura RX_CONTEXT.

Para uma solicitação IRP_MJ_QUERY_VOLUME_INFORMATION com o membro Info.FsInformationClass definido como FileFsDeviceInformation, o minidiretório de rede retorna as seguintes informações na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

O membro Info.Buffer contém uma estrutura FILE_FS_DEVICE_INFORMATION

O membro Info.Buffer.Characteristics é definido como as características do volume, que deve incluir FILE_REMOTE_DEVICE como uma das opções.

O membro Info.Buffer.DeviceType é definido como o membro DeviceType da estrutura NET_ROOT associada. Se o membro Type do NET_ROOT associado for NET_ROOT_PIPE, o membro Info.Buffer.DeviceType será definido como FILE_DEVICE_NAMED_PIPE.

Para uma solicitação IRP_MJ_QUERY_VOLUME_INFORMATION com o membro Info.FsInformationClass definido como FileFsVolumeInformation, o minidiretório de rede retorna as seguintes informações na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

O membro Info.Buffer contém uma estrutura FILE_FS_VOLUME_INFORMATION.

O membro Info.Buffer é definido como o membro VolumeInfo da estrutura NET_ROOT associada.

O membro Info.LengthRemaining é definido como o membro VolumeInfoLength da estrutura NET_ROOT associada.

Uma chamada MRxQueryVolumeInfo do RDBSS para IRP_MJ_FILE_SYSTEM_CONTROL é uma solicitação para as informações de acompanhamento de link. Antes de chamar MRxQueryVolumeInfo para IRP_MJ_FILE_SYSTEM_CONTROL, o RDBSS modifica os seguintes membros na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

O membro Info.FsInformationClass está definido como FileFsObjectIdInformation.

O membro Info.Buffer é definido como uma estrutura FILE_FS_OBJECTID_INFORMATION.

O membro Info.LengthRemaining é definido como sizeof(FILE_FS_OBJECTID_INFORMATION).

Para esse caso de uma solicitação de IRP_MJ_FILE_SYSTEM_CONTROL, o membro AssociatedIrp.SystemBuffer do IRP aponta para uma estrutura LINK_TRACKING_INFORMATION.

Se uma solicitação for iniciada como um IRP_MJ_FILE_SYSTEM_CONTROL para MRxQueryVolumeInfo com um valor retornado de STATUS_SUCCESS ou STATUS_BUFFER_OVERFLOW, o RDBSS copiará o membro ObjectId da estrutura FILE_FS_OBJECTID_INFORMATION passada no membro Info.Buffer da estrutura RX_CONTEXT para o membro NetRoot-DiskParameters.VolumeId> da estrutura FCB e para o membro AssociatedIrp.SystemBuffer.VolumeId do IRP. Se a chamada para MRxQueryVolumeInfo tiver sido bem-sucedida, o RDBSS definirá o membro Type da estrutura LINK_TRACKING_INFORMATION. Se o membro NetRoot-Flags> da estrutura FCB tiver o NETROOT_FLAG_DFS_AWARE_NETROOT bit definido, o membro Type será definido pelo RDBSS como DfsLinkTrackingInformation. Se o membro NetRoot-Flags> da estrutura FCB não tiver o NETROOT_FLAG_DFS_AWARE_NETROOT bit definido, o membro Type será definido pelo RDBSS como NtfsLinkTrackingInformation. Em caso de êxito, o RDBSS define o membro IoStatus.Information do IRP para o tamanho de uma estrutura de LINK_TRACKING_INFORMATION.

A rotina MRxSetEaInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede defina informações de atributo estendido em um objeto do sistema de arquivos.

O RDBSS emite uma chamada para MRxSetEaInfo em resposta ao recebimento de uma solicitação de IRP_MJ_SET_EA .

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

O membro Info.Buffer é definido como o buffer de usuário do pacote de solicitação de E/S. Esse buffer já foi bloqueado pelo RDBSS, se necessário.

O membro Info.LengthRemaining é definido como IrpSp-Parameters.QueryEa.Length>.

A rotina MRxSetFileInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede defina informações de arquivo em um objeto do sistema de arquivos.

O RDBSS emite uma chamada para MRxSetFileInfo em resposta ao recebimento de uma solicitação de IRP_MJ_SET_INFORMATION .

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

O membro Info.FileInformationClass é definido como IrpSp-Parameters.SetFile.FileInformationClass>, o valor FILE_INFORMATION_CLASS especificado.

O membro Info.Buffer é definido como Irp-AssociatedIrp.SystemBuffer>.

O membro Info.Length é definido como IrpSp-Parameters.SetFile.Length>.

A rotina MRxSetFileInfoAtCleanup é chamada pelo RDBSS para solicitar que um minidiretório de rede defina informações de arquivo em um objeto do sistema de arquivos na limpeza.

O RDBSS emite uma chamada para MRxSetFileInfoAtCleanup durante a limpeza, quando o último identificador para um objeto de arquivo é fechado. Isso é diferente da operação de fechamento que é invocada quando a última referência a um objeto de arquivo é excluída.

MRxSetFileInfoAtCleanup será chamado pelo RDBSS se os carimbos de data/hora em um arquivo ou o tamanho de um arquivo tiverem sido alterados. As chamadas para MRxSetFileInfoAtCleanup por RDBSS são feitas separadamente para cada uma dessas alterações. Se o tamanho do arquivo e os carimbos de data/hora tiverem sido alterados, o RDBSS fará duas chamadas para MRxSetFileInfoAtCleanup.

Antes de chamar MRxSetFileInfoAtCleanup, o RDBSS modificará os seguintes membros na estrutura RX_CONTEXT apontada pelo parâmetro RxContext se os carimbos de data/hora em um arquivo tiverem sido alterados:

O membro Info.FileInformationClass é definido como um valor FILE_INFORMATION_CLASS de FileBasicInformation.

O membro Info.Buffer é definido como uma estrutura FILE_BASIC_INFORMATION alocada na pilha.

O membro Info.Length é definido como o tamanho de uma estrutura FILE_BASIC_INFORMATION.

Antes de chamar MRxSetFileInfoAtCleanup, o RDBSS modificará os seguintes membros na estrutura RX_CONTEXT apontada pelo parâmetro RxContext se o tamanho de um arquivo tiver sido alterado:

O membro Info.FileInformationClass é definido como um valor FILE_INFORMATION_CLASS de FileEndOfFileInformation.

O membro Info.Buffer é definido como uma estrutura FILE_END_OF_FILE_INFORMATION alocada na pilha.

O membro Info.Length é definido como sizeof(FILE_END_OF_FILE_INFORMATION).

O RDBSS ignora o valor retornado de MRxSetFileInfoAtCleanup.

Um minidiretório de rede pode optar por não fazer nada nessa rotina e retornar STATUS_SUCCESS. Todas as alterações no tamanho do arquivo ou nos carimbos de data/hora serão tratadas durante a operação de limpeza.

A rotina MRxSetQuotaInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede defina informações de cota em um objeto do sistema de arquivos.

O RDBSS emite uma chamada para MRxSetQuotaInfo em resposta ao recebimento de uma solicitação de IRP_MJ_SET_QUOTA .

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

O membro Info.Buffer é definido como o buffer de usuário do pacote de solicitação de E/S. Esse buffer já foi bloqueado pelo RDBSS, se necessário.

O membro Info.LengthRemaining é definido como IrpSp-Parameters.SetQuota.Length>.

A rotina MRxSetSdInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede defina informações do descritor de segurança em um objeto do sistema de arquivos.

O RDBSS emite uma chamada para MRxSetSdInfo em resposta ao recebimento de uma solicitação de IRP_MJ_SET_SECURITY .

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

O membro SetSecurity.SecurityInformation está definido como IrpSp-Parameters.SetSecurity.SecurityInformation>.

O membro SetSecurity.SecurityDescriptor é definido como IrpSp-Parameters.SetSecurity.SecurityDescriptor>.

A rotina MRxSetVolumeInfo é chamada pelo RDBSS para solicitar que um minidiretório de rede defina informações de volume.

O RDBSS emite uma chamada para MRxSetVolumeInfo em resposta ao recebimento de uma solicitação de IRP_MJ_SET_VOLUME_INFORMATION .

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

O membro Info.FsInformationClass é definido como IrpSp-Parameters.SetVolume.FsInformationClass>.

O membro Info.Buffer é definido como Irp-AssociatedIrp.SystemBuffer>.

O membro Info.LengthRemaining é definido como IrpSp-Parameters.SetVolume.Length>.

A rotina MRxShouldTryToCollapseThisOpen é chamada pelo RDBSS para solicitar que um minidiretório de rede indique se o RDBSS deve tentar recolher uma solicitação aberta em um objeto do sistema de arquivos existente.

MRxShouldTryToCollapseThisOpen é chamado para determinar se uma solicitação aberta não deve ser recolhida.

Antes de chamar MRxShouldTryToCollapseThisOpen, o RDBSS modifica o seguinte membro na estrutura RX_CONTEXT apontada pelo parâmetro RxContext :

O membro pRelevantSrvOpen é definido como o SRV_OPEN.

A chamada para MRxShouldTryToCollapseThisOpen pode ser uma solicitação de notificação de alteração para um diretório. Portanto, o minidiretório de rede pode não permitir o recolhimento de solicitações abertas para que a notificação de alteração funcione corretamente.

O RDBSS não permite o recolhimento será aberto se o membro Create.NtCreateParameters.CreateOptions da estrutura RX_CONTEXT tiver a opção FILE_OPEN_FOR_BACKUP_INTENT ou a opção FILE_DELETE_ON_CLOSE definida.

A rotina MRxTruncate é chamada pelo RDBSS para solicitar que um minidiretório de rede trunque o conteúdo de um objeto do sistema de arquivos.

MRxTruncate será chamado como parte das operações de limpeza se ambas as seguintes condições forem verdadeiras:

  • O objeto de arquivo corresponde a um arquivo ou diretório de disco

  • Esta é a última chamada de limpeza e o objeto de arquivo foi marcado para truncamento.

O objeto de arquivo será marcado para truncamento se o membro fcbstate da estrutura FCB tiver o FCB_STATE_TRUNCATE_ON_CLOSE bit definido. O RDBSS não inicializará o mapa de cache posteriormente.

Uma chamada para MRxTruncate será seguida por uma chamada para MRxCleanupFobx como parte da operação de limpeza.

O RDBSS ignora o valor retornado de MRxTruncate.

A rotina MRxZeroExtend é chamada pelo RDBSS para solicitar que um minidiretório de rede trunque o conteúdo de um objeto do sistema de arquivos.

MRxZeroExtend será chamado como parte das operações de limpeza se o objeto de arquivo não tiver sido marcado para exclusão e o objeto de arquivo não for um arquivo de paginação. MRxZeroExtend é chamado para garantir que a parte entre o comprimento de dados válido e o tamanho do arquivo seja estendida por zero. Depois de chamar MRxZeroExtend, o RDBSS define o membro Header.ValidDataLength.QuadPart da estrutura de uma estrutura FCB igual ao membro Header.FileSize.QuadPart da estrutura FCB.

Uma chamada para MRxZeroExtend será seguida por uma chamada para MRxCleanupFobx como parte da operação de limpeza.

O RDBSS ignora o valor retornado de MRxZeroExtend.

A rotina MRxCleanupFobx é chamada pelo RDBSS para solicitar que o minidiretório de rede feche uma extensão de objeto do sistema de arquivos. O RDBSS emite essa chamada em resposta ao recebimento de uma solicitação IRP_MJ_CLEANUP em um objeto de arquivo.

MRxCleanupFobx é chamado pelo RDBSS como parte das operações de limpeza e fechamento em um objeto de arquivo.

MRxCleanupFobx não pode retornar um valor de STATUS_RETRY indicando que a chamada deve ser repetida. Se um loop de repetição for necessário, ele deverá ser tratado internamente na rotina MRxCleanupFobx pelo minidiretório de rede.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho mrx.h (inclua Mrx.h)

Confira também

MRxAreFilesAliased

MRxCleanupFobx

MRxCollapseOpen

MRxCreate

MRxDeallocateForFobx

MRxDeallocateForFobx

MRxExtendForCache

MRxExtendForNonCache

MRxFlush

MRxForceClosed

MRxIsLockRealizable

MRxShouldTryToCollapseThisOpen

MRxTruncate

MRxZeroExtend

RxFinalizeNetFCB