Função RxStopMinirdr (mrx.h)
RxStopMinirdr é chamado para interromper um minidiretório de rede que foi iniciado anteriormente. Como parte do RxStopMinirdr, o RDBSS também descreva o driver de minidiretório de rede como um provedor UNC (convenção de nomenclatura universal) com o MUP (Provedor Multi UNC) se o driver indicar suporte para nomes UNC.
Sintaxe
NTSTATUS RxStopMinirdr(
[in] IN PRX_CONTEXT RxContext,
[out] OUT PBOOLEAN PostToFsp
);
Parâmetros
[in] RxContext
Um ponteiro para a estrutura RX_CONTEXT a ser usada para obter o objeto do dispositivo e determinar se esse é um processo do sistema de arquivos.
[out] PostToFsp
Um ponteiro para um valor lógico definido como TRUE no retorno se a solicitação precisar ser postada para processamento posterior pelo processo do sistema de arquivos.
Retornar valor
RxStopMinirdr retornará STATUS_SUCCESS se a sequência de parada tiver sido bem-sucedida ou um dos seguintes valores de erro:
Código de retorno | Descrição |
---|---|
STATUS_PENDING | A sequência de stop para RDBSS e minidiretórios de rede deve ser concluída no contexto do processo do sistema de arquivos. Se a chamada para RxStopMinirdr for proveniente de um processo diferente (uma solicitação de modo de usuário, por exemplo), a solicitação será postada para processamento posterior e STATUS_PENDING será retornado. Esse erro também poderá ser retornado se determinados bloqueios rdbss internos não puderem ser adquiridos sem esperar. |
STATUS_REDIRECTOR_HAS_OPEN_HANDLES | O minidiretório de rede tem identificadores abertos e não pode ser interrompido no momento. |
STATUS_REDIRECTOR_STOPPED | O minidiretório de rede já foi interrompido. |
Comentários
Quando uma solicitação de parada é emitida para RDBSS, pode haver solicitações em andamento no RDBSS. Algumas das solicitações podem ser canceladas enquanto as solicitações restantes precisam ser processadas para conclusão.
Há várias estratégias que podem ser empregadas para fechar o RDBSS. Atualmente, a abordagem mais conservadora é empregada. O cancelamento dessas operações que podem ser canceladas e a operação de parada é retido até que as solicitações restantes sejam executadas até a conclusão.
O RDBSS RxStopMinirdr geralmente é chamado como resultado de uma solicitação FSCTL ou IOCTL de um aplicativo ou serviço no modo de usuário para interromper o minidiretório de rede, embora essa chamada também possa ser feita do minidiretório de rede ou como parte do processamento de desligamento pelo sistema operacional.
Depois que uma chamada para RxStopMinirdr é emitida, as únicas operações permitidas pelo RDBSS e passadas para o minidiretório de rede são solicitações para os seguintes pacotes de solicitação de E/S:
- IRP_MJ_CLEANUP
- IRP_MJ_CLOSE
A sequência de parada para RDBSS e o minidiretório de rede deve ser concluída no contexto do processo do sistema de arquivos. Se a chamada para RxStopMinirdr for proveniente de um processo diferente (uma solicitação de modo de usuário, por exemplo), a solicitação deverá ser postada para processamento posterior e STATUS_PENDING será retornado. Nesse caso, a ID de usuário efetiva (a ID de logon) do chamador é salva no membro FsdUid do parâmetro RxContext . Além disso, se determinados bloqueios rdbss internos não puderem ser obtidos sem esperar, STATUS_PENDING será retornado e PostToFsp será definido como TRUE. Quando STATUS_PENDING for retornado, RxStopMinirdr será postado para processamento posterior por um processo do sistema de arquivos e concluído.
Se um minidiretório de rede indicar suporte para UNC ao registrar com RDBSS (o parâmetro Controls para RxRegisterMinirdr), o RxStopMinirdr tentará desmarcar o DeviceName do minidiretório de rede como um provedor UNC com MUP (chama FsRtlDeregisterUncProvider em nome do minidiretório de rede). RxStopMinirdr também desregula o sistema de arquivos com o gerenciador de E/S (chama IoUnregisterFileSystem) em nome do minidiretório de rede).
A rotina RxStopMinirdr chama a rotina de retorno de chamada mrxStop do minidiretor de rede se essa rotina for implementada. Se não houver FCBs ativos restantes, STATUS_SUCCESS será retornado. Se houver alguns FCBs ativos restantes, STATUS_REDIRECTOR_HAS_OPEN_HANDLES será retornado. Em ambos os casos, o dispatcher rdbss para o redirecionador é girado para baixo e o estado interno do minidiretório de rede no RDBSS é definido como RDBSS_STARTABLE.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | mrx.h (inclua Mrx.h) |
IRQL | <= APC_LEVEL |