sexta-feira, 24 de fevereiro de 2012

Perfil em outra unidade: reinstalou o Windows? E agora?

ATUALIZAÇÃO: final desatroso. Depois que fiz todo o procedimento descrito a seguir, não reiniciei a máquina. Troquei o perfil de lugar e fiz logoff, logon novamente. O básico ficou funcionando e, tirando alguns atalhos quebrados de programas anteriormente instalados, o resto parecia ok. Parecia... foi só reiniciar que quebrou tudo. Windows Explorer não abre mais, Painel de Controle, nada. O sistema ficou totalmente bugado. Então atenção: o tutorial a seguir não funciona. Leia-o apenas como curiosidade. Que tristeza...
---
Para quem seguiu o meu tutorial para mover o perfil para outra unidade, uma pergunta que deve ter ficado é: se o Windows for reinstalado, será possível aproveitar o perfil sem precisar criar outro e mover os dados para ele?

Resposta: sim, com alguns malabarismos.

Causa: permissões.

Cada vez que um novo usuário é criado no Windows, ele é associado a um SID (Security Identifier). Ao reinstalar, mesmo que seja criada uma conta com o mesmo nome, o SID será diferente e o redirecionamento não funcionará. Contas internas, como "SISTEMA", "REDE", "SERVIÇO LOCAL", usam SIDs invariáveis, que são mapeados corretamente na nova instalação. Vale o mesmo para grupos pré-definidos, como "Administradores", "Usuários", etc. O problema fica apenas por conta dos usuários propriamente ditos.

As permissões de acesso da pasta raiz dos perfis, bem como das subpastas "Default" e "Public" usam SIDs comuns e não precisam ser alteradas.

Mas não a pasta do usuário (D:\Users\<usuario> usarei a partir daqui). Na nova instalação, antes de redirecionar o perfil para a outra unidade, clique com o botão direito na pasta do usuário na unidade D e vá em "Propriedades -> Segurança", botão "Avançadas". Clique em "Continuar".


Veja que está ali a conta da instalação anterior (S-1-5...). Selecione-a e clique em "Remover". Então, clique em "Adicionar...", digite o nome do usuário que criou na instalação nova e clique em "Verificar nomes". Será adicionado o nome da máquina antes. Clique em "OK". Na próxima tela, clique, na coluna "Permitir", em "Controle total".

De volta à janela de permissões avançadas, marque "Substituir todas as permissões de objetos filhos por permissões herdadas deste objeto".


Responda "Sim" na janela de confirmação.

Agora, precisamos alterar o dono dos arquivos e subpastas de D:\Users\<usuario>. Se o dono dela fosse o seu usuário, ficaria fácil fazer pela interface, mas o Windows coloca como dono a conta "SISTEMA". O conteúdo da pasta sim que tem o seu usuário como dono. Dá para modificar isso pela interface, mas será trabalhoso pois você precisará ir de pasta em pasta (incluindo as ocultas e de sistema). Existe uma forma muito mais simples de fazer pelo prompt. Abra "Iniciar -> Acessórios -> Prompt de Comando" (não precisa ser como Administrador, pois seu usuário já possui permissão total, o que inclui trocar o dono) e rode:

icacls "D:\Users\<usuario>\*.*" /setowner <conta> /t /c /l

Substitua <usuario> pela pasta correta e <conta> pelo nome da conta criada na nova instalação. Isso mudará o dono de todos os arquivos e subpastas.

Meio caminho andado. Espere, o quê? Tem mais?

Aham, falta a permissão da sua hive do registro: o arquivo NTUSER.DAT, que o Windows carrega como HKEY_CURRENT_USER na hora que o usuário faz logon. Internamente, as hives e todas as subchaves possuem permissões de acesso que são independentes das permissões do sistema de arquivos!

Configure o Windows Explorer para exibir pastas e arquivos ocultos, bem como de sistema: "Ferramentas -> Opções de pasta... -> Modo de Exibição", desmarque "Ocultar arquivos protegidos do sistema operacional (Recomendado)" e selecione "Mostrar arquivos, pastas e unidades ocultas".

Abra o regedit ("Iniciar -> Acessórios -> Executar -> regedit -> OK"), selecione "HKEY_USERS", vá em "Arquivo -> Carregar Hive...". Abra o arquivo D:\Users\<usuario>\NTUSER.DAT e na próxima tela dê um nome para identificar a hive temporariamente (no meu exemplo, usei CAIXASECA).


Clique com o botão direito na hive temporária, vá em "Permissões..." e clique no botão "Avançadas". Você terá a mesma tela de permissões do sistema de arquivos, só que agora aplicada às chaves e subchaves do registro.


Remova a "Conta desconhecida" e adicione o seu usuário. É o mesmo processo feito anteriormente, com a diferença que permitir "Controle total" é agora aplicado a "Esta chave e subchaves".


Marque "Substituir todas as permissões de objetos filhos por permissões herdadas deste objeto", aplique e confirme. Eu recebi a mensagem a seguir -- não sei o porquê, mas acho que você pode ignorá-la caso apareça aí também.


OK. Ainda com a hive temporária marcada, vá em "Arquivo -> Descarregar Hive...".

Falta só uma coisa. Vá em D:\Users\<usuario> e verá (com o Windows Explorer exibindo pastas e arquivos ocultos/de sistema) algo assim:


Os únicos arquivos necessários são NTUSER.DAT e ntuser.ini. Os outros cinco, com extensão "LOG1", "LOG2", "blf" e "regtrans-ms", exclua. O Windows os criará novamente no próximo logon.

Finalmente pronto! Agora pode mudar o perfil de lugar que ele funcionará na sua nova instalação. Todas as configurações dos programas que usem o registro (HKEY_CURRENT_USER) ou a pasta de perfil serão (esperançosamente) aproveitadas.

Escrevendo este post lembrei de alguns fanboys lá no FGdH dizendo que Linux é a maior maravilha do mundo pois "possui sistema de permissões" e que o Ruindows é uma caca pois não o tem. Haja paciência... Pelo contrário. Em suas configurações padrão, os Windows NT possuem um sistema de permissões mais complexo e refinado que o Unix 888 (para eu não ser triturado, ACLs no Linux dão flexibilidade similar).

Nenhum comentário:

Postar um comentário