Função FsRtlRegisterUncProviderEx (ntifs.h)
A rotina FsRtlRegisterUncProviderEx registra um redirecionador de rede como um provedor UNC (convenção de nomenclatura universal) com o sistema de vários provedores UNC (MUP).
Sintaxe
NTSTATUS FsRtlRegisterUncProviderEx(
[out] PHANDLE MupHandle,
[in] PCUNICODE_STRING RedirDevName,
[in] PDEVICE_OBJECT DeviceObject,
[in] FSRTL_UNC_PROVIDER_FLAGS Flags
);
Parâmetros
[out] MupHandle
Um ponteiro para um local no qual retornar um identificador MUP a ser usado ao chamar FsRtlDeregisterUncProvider para desregister o redirecionador de rede. O identificador retornado será válido somente se FsRtlRegisterUncProviderEx retornar STATUS_SUCCESS.
[in] RedirDevName
Um ponteiro para uma cadeia de caracteres Unicode que contém o nome do dispositivo do redirecionador de rede. O MUP usa esse nome de dispositivo para criar um link simbólico no namespace do Gerenciador de Objetos cujo destino é \Device\Mup.
[in] DeviceObject
Um ponteiro para um objeto de dispositivo sem nome que representa o redirecionador de rede.
[in] Flags
Uma máscara de bits que indica os recursos compatíveis com o redirecionador de rede. Um redirecionamento de rede define um pouco para indicar que há suporte para um recurso. O parâmetro Flags tem duas opções:
FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED
O redirecionador de rede dá suporte a emailslots. Essa opção normalmente é reservada para uso pelo redirecionador SMB da Microsoft.
FSRTL_UNC_PROVIDER_FLAGS_CSC_ENABLED
O redirecionador de rede dá suporte ao acesso offline usando o cache do lado do cliente.
Valor de retorno
FsRtlRegisterUncProviderEx retorna STATUS_SUCCESS com êxito ou um valor NTSTATUS apropriado, como um dos seguintes:
Código de retorno | Descrição |
---|---|
|
O modo solicitante do IRP enviado ao MUP não era do modo kernel. |
|
Ocorreu uma violação de acesso ao tentar acessar o dispositivo MUP. |
|
Houve um desalinhamento de dados. |
|
Não havia recursos suficientes disponíveis para alocar memória para buffers. |
|
Foi feita uma solicitação para registrar um provedor conhecido que já estava registrado. |
|
O parâmetro RedirDevName |
|
Uma incompatibilidade de tipo de objeto foi encontrada com o parâmetro DeviceObject. |
Observações
Um redirecionador de rede deve registrar-se com o MUP (vários provedores UNC) para lidar com nomes UNC (Convenção Universal de Nomenclatura). O MUP é um componente do modo kernel responsável por canalizar todos os acessos do sistema de arquivos remoto usando um nome UNC (Convenção Universal de Nomenclatura) para um redirecionador de rede (o provedor UNC) que é capaz de lidar com as solicitações do sistema de arquivos remoto. O MUP está envolvido quando um caminho UNC é usado por um aplicativo, conforme ilustrado pelo exemplo a seguir, que pode ser executado a partir de uma linha de comando:
notepad \\server\public\readme.txt
O MUP não está envolvido durante uma operação que cria uma letra de unidade mapeada (o comando "NET USE", por exemplo). Essa operação é tratada pelo MPR (roteador de vários provedores) e uma DLL do provedor WNet no modo de usuário para o redirecionador de rede. No entanto, uma DLL do provedor WNet no modo de usuário pode se comunicar diretamente com um driver de redirecionamento de rede no modo kernel durante essa operação.
Para redirecionadores de rede que estão em conformidade com o modelo de redirecionador do Windows Vista, o MUP está envolvido mesmo quando uma unidade de rede mapeada é usada. As operações de arquivo executadas na unidade mapeada passam pelo MUP até o redirecionador de rede. Observe que, nesse caso, o MUP simplesmente passa a operação para o redirecionador de rede envolvido.
FsRtlRegisterUncProviderEx envia um FSCTL (controle do sistema de arquivos privado) ao MUP para executar o registro.
O nome do dispositivo especificado no parâmetro RedirDevName na chamada para FsRtlRegisterUncProviderEx torna-se um link simbólico para \device\Mup no namespace do gerenciador de objetos. Além disso, uma solicitação aberta do nome do dispositivo, RedirDevName, roteará-se para o objeto de dispositivo de redirecionamento de rede real apontado pelo parâmetro DeviceObject.
Os redirecionadores de rede que chamam FsRtlRegisterUncProviderEx não devem se registrar como um sistema de arquivos (os redirecionadores de rede não devem chamar IoRegisterFileSystem). Os minidiretórios de rede que usam o RDBSS do Windows Vista (vinculação dinâmica ou estática) não serão registrados como um sistema de arquivos.
Objetos de arquivo na pilha do sistema de arquivos remoto de propriedade de um redirecionador de rede que está em conformidade com o modelo de redirecionamento do Windows Vista resolvido para MUP. Portanto, IoGetDeviceAttachmentBaseRef retorna o objeto do dispositivo para MUP, não o redirecionador de rede que possui o objeto de arquivo. No entanto, o conteúdo do objeto de arquivo ainda pertence ao redirecionador de rede.
O valor do registro ProviderOrder determina a ordem na qual o MUP emite solicitações de resolução de prefixo para redirecionadores de rede individuais. Essa ordem pode ser alterada dinamicamente sem uma reinicialização. Esse valor do Registro está localizado na seguinte chave do Registro:
HKLM\CurrentControlSet\Control\NetworkProvider\Order
Somente um provedor de rede em um sistema pode dar suporte a emailslots. Portanto, a opção FSRTL_UNC_PROVIDER_FLAGS_MAILSLOTS_SUPPORTED no parâmetro Flags normalmente é definida apenas para o redirecionador SMB da Microsoft.
Para desregister um provedor UNC, use FsRtlDeregisterUncProvider e passe o parâmetro MupHandle.
Se um driver se registrar como um sistema de arquivos de disco local (chamando IoCreateDevice com o parâmetro DeviceType definido como FILE_DEVICE_DISK_FILE_SYSTEM), o driver não deverá chamar FsRtlRegisterUncProviderEx para se registrar como um provedor UNC com MUP.
Para obter mais informações, consulte as seguintes seções no Guia de Design:
suporte para nomenclatura UNC e MUP
alterações de MUP no Microsoft Windows Vista
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows Vista |
da Plataforma de Destino |
Universal |
cabeçalho | ntifs.h (inclua Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL |
NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |