Por que processos diferentes veem instâncias diferentes da pasta System32?

10

Estou executando o Windows 8 Enterprise x64. Efetuei logon usando uma conta do grupo Administradores. Quando abro o Windows Explorer ou um prompt de comando, vejo o arquivo cdd.dll:

explorador de janelas


C:\Windows\system32>dir cdd.dll
 Volume in drive C has no label.
 Volume Serial Number is ▨▨▨▨-▨▨▨▨

 Directory of C:\Windows\system32

07/25/2012  09:49 PM           199,680 cdd.dll

Mas se eu abrir uma caixa de diálogo Abrir arquivo no navegador Chrome, Visual Studio ou em alguns outros aplicativos (todos aplicativos de 32 bits) e navegar até C:\Windows\system32esse arquivo (o filtro está definido para mostrar Todos os arquivos). E se eu chamar o item de menu de contexto "Abrir janela de comando aqui" usando Shift + RightClick na caixa de diálogo Abrir arquivo e digitar, direle confirma que não existe esse arquivo:

Caixa de diálogo Abrir arquivo


C:\Windows\System32>dir cdd.dll
 Volume in drive C has no label.
 Volume Serial Number is ▨▨▨▨-▨▨▨▨

 Directory of C:\Windows\System32

File Not Found

Esse efeito não é específico cdd.dll, pois muitos outros arquivos também diferem. Foi-me dito que isso é um efeito da virtualização do sistema de arquivos , sobre o qual sei muito pouco.

Você poderia me explicar ou me fornecer uma referência que explique como isso realmente funciona? Na verdade, existem várias instâncias diferentes da System32pasta. Qual é a sua localização física no disco? É possível acessar a partir de arquivos de processo de 32 bits em uma System32pasta diferente daquela mostrada nos processos de 32 bits por padrão.

Vladimir Reshetnikov
fonte
Eles aparecem em algum aplicativo x64? Eu tenho um palpite de que o Windows "oculta" drivers de 64 bits (cdd.dll é um driver de vídeo) de aplicativos de 32 bits.
Nathan C
Sim, todos os aplicativos de 64 bits que permitem navegar no sistema de arquivos (por exemplo, têm uma caixa de diálogo Abrir arquivo) mostram os mesmos arquivos que o Windows Explorer.
Vladimir Reshetnikov
@VladimirReshetnikov Há algo que você ainda não entende, editou sua pergunta, mas não incluiu mais detalhes, também não aceitou nenhuma das respostas. Você precisa de mais alguma coisa esclarecida?
Scott Chamberlain
@ScottChamberlain Acabei de editar as tags. Você responde é muito bom. Obrigado!
Vladimir Reshetnikov 17/07/2013

Respostas:

11

O problema é o redirecionamento de pasta . Se um programa de 32 bits tentar acessar a %windir%\System32pasta, ele será invisivelmente redirecionado para o %windir%\SysWOW64diretório. Isso significa compatibilidade com aplicativos de 32/64 bits.

Todos os arquivos no System32 são de 64 bits; no entanto, se um programa foi gravado incorretamente, eles podem ter codificado o System32 no programa ao procurar uma DLL. Para evitar travamentos aleatórios de programas de programas gravados incorretamente, a Microsoft faz esse redirecionamento.

Se você precisar acessar a pasta System32 e não a pasta SysWOW64, navegue até a pasta "oculta", %windir%\sysnativeque o levará à System32pasta "real" e poderá navegar na pasta normalmente.

Scott Chamberlain
fonte
%windir%é uma variável de ambiente, você poderia escrevê-lo em apenas como aquele em janelas e ele iria trabalhar, 99% do tempo que ele representaC:\Windows
Scott Chamberlain
4

O WOW64 (Windows no Windows 64 bits) usa várias tecnologias / técnicas para suportar aplicativos de 32 bits. Entre esses estão os redirecionadores de pastas e registros.

Windows Dev Center: Desktop executando aplicativos de 32 bits

Brian
fonte
E, mais especificamente, informações sobre perfis de compatibilidade de aplicativos, que fazem essa mágica acontecer.
21813 David Hoelzer