Tente criar o link para \servername\sharename\Public\Quick Books Data\Finance Drive
em vez da unidade mapeada Q:
. No meu Windows 7 x64, os dois métodos funcionam, no entanto.
Certifique-se também de ter estabelecido uma sessão com o servidor remoto (verifique com net use
), a menos que seja um compartilhamento antigo do Windows que não requer credenciais.
Além disso, assegure-se de que as ACLs estejam corretamente configuradas no symlink com icacls /L
. Executá-lo sem /L
não produzirá os resultados esperados. Isso requer direitos de administrador como a criação do symlink.
Editar 1:
Ao contrário do que escrevi em uma revisão anterior dessa resposta, o objeto e o gerenciador de E / S conseguem entender as unidades de rede mapeadas (procure por\Device\LanManRedirector
symlinks em WinObj
sob um dos diretórios de objetos abaixo de \Sessionsfsutil behavior query SymLinkEvaluation
\DosDevices
). Apenas testei isso.
Eu também procurei no Windows Internals, 5ª edição, por Russinovich et al. (páginas 924 e seguintes), porque você me deixou curioso. Você pode querer verificar com mup
como os links simbólicos estão configurados em seu sistema. O padrão seria (também no Vista SP2):
>fsutil behavior query SymLinkEvaluation
Local to local symbolic links are enabled.
Local to remote symbolic links are enabled.
Remote to local symbolic links are disabled.
Remote to remote symbolic links are disabled.
Apenas testamos que ele funciona para ligar simbolicamente o caminho UNC ou a letra da unidade mapeada, desde que a ACL esteja definida corretamente no compartilhamento, bem como no link simbólico. Definir a ACL no symlink muito restritivo causará falha, no entanto. Testei-o para um compartilhamento em estilo antigo e um que requer credenciais (no meu caso em um domínio, enquanto não estou nesse domínio).
Para listar o uso da ACL:
icacls <symlink-name> /L
No entanto, também testei no Vista SP2 x64 agora e estou com o problema que você está executando em se eu uso a letra da unidade como caminho de destino, embora a política de avaliação de links simbólicos esteja definida o mesmo que para o Windows 7 SP1 x64 no qual testei.
Editar 2:
No WinDbg, eu estava acompanhando o que está acontecendo. Decidi primeiro verificar o driver LanManRedirector
que eu sei que possui o L:
entre outros objetos do dispositivo. Meu debuggee do kernel era um SP2 do Vista que expunha o mesmo comportamento que você vê.
Primeiro, criei um mapeamento de unidade de rede \server\share
to C:\Users\user\drv-name
e dois links simbólicos: L:\
apontando para C:\Users\user\unc-name
e \server\share
apontando para dt ntfs!* -v
.
Sabendo que os links simbólicos são pontos de nova análise, decidi listar todas as funções do driver NTFS ( 0x24
) e escolher o mais promissor para definir pontos de interrupção em:
kd> bp Ntfs!NtfsGetReparsePoint
kd> bp Ntfs!NtfsReparsePointName
kd> bp Ntfs!NtfsInitializeReparseFile
kd> bp Ntfs!_imp_FsRtlValidateReparsePointBuffer
kd> bp Ntfs!NtfsReparsePointString
kd> bp Ntfs!NtfsCreateReparsePointInternal
kd> bp Ntfs!NtfsGetReparsePointValue
é claro, negligenciando que os drivers do sistema de arquivos são muito delicados. O que Windos me lembrou com um bug insistente - verifique %code% .
Infelizmente, depois que o sistema voltou a funcionar, os dois links simbólicos funcionaram mesmo nessa máquina virtual do Vista SP2. Isso significa que não tenho como reproduzir o problema de maneira consistente. Significa que não posso cavar mais fundo por enquanto.