Como obter acesso à pasta %ProgramFiles%\WindowsApps e ver o código-fonte das apps

Ler o código-fonte desenvolvido por outras pessoas é uma das formas mais interessantes de aprender coisas novas, em minha opinião. No caso das aplicações Windows 8, gosto de perceber como determinadas apps foram desenvolvidas, que tipos de funções foram utilizadas para resolver determinados problemas, e até mesmo como é que alguns ecrãs foram desenhados e quais estilos foram aplicados.
Todas as aplicações “Windows Store” que instalamos através da loja Windows são armazenadas fisicamente na pasta %ProgramFiles%\WindowsApps, e dentro desta pasta existem as diversas sub-pastas que representam cada aplicação.
Dentro da pasta de uma aplicação, estão todos os ficheiros necessários para que a aplicação seja executada, incluindo ficheiros XAML, executáveis e assemblies para aplicações desenvolvidas em XAML/.NET ou C++, e ficheiros HTML, JavaScript CSS, para aplicações desenvolvidas com essas linguagens.
No entanto, o acesso à pasta %ProgramFiles%\WindowsApps é bloqueado para um utilizador normal, e o único utilizador com permissões para aceder e modificar essa pasta é um utilizador chamado “TrustedInstaller“, que é utilizado para instalar e desinstalar aplicações Windows Store. Este utilizador tem permissões de “owner” da pasta, e portanto tem total controlo.
Estas são as definições padrão de permissões da pasta%ProgramFiles%\WindowsApps:
Só é possível haver um utilizador “owner” de uma pasta, e apenas esse utilizador é que consegue atribuir permissões de acesso a outros utilizadores. Assim, para conseguirmos ter permissão para aceder ao conteúdo da pasta %ProgramFiles%\WindowsApps, temos de seguir estes passos:
  1. Atribuir a permissão de “owner” para o nosso utilizador (e como só pode haver um “owner“, o “TrustedInstaller” deixa de ser o “owner” da pasta);
  2. Atribuir permissões de acesso à pasta para o nosso utilizador;
  3. Atribuir a permissão de “owner” de volta para o utilizador “TrustedInstaller“, para que as aplicações continuem a ser instaladas/desinstaladas sem problemas.
Para atribuir a permissão de “owner” na pasta WindowsApps, precisamos abrir um Command Prompt como Administrador, e utilizar o comando takeown, mas antes convém fazer um backup das permissões desta pasta, para no caso de algo der errado podermos restaurar as permissões exatamente como estavam:
@REM Backup das permissões actuais
icacls "%ProgramFiles%\WindowsApps" /save "%TEMP%\WindowsApps.acl" /Q
@REM Atribuir "owner" ao utilizador actual
takeown /F "%ProgramFiles%\WindowsApps"
Neste momento, o utilizador actual passou a ser o “owner” da pasta WindowsApps. Na imagem acima, pode ver que é o meu utilizador “Caio Proiete”.
O próximo passo é atribuir permissões de acesso à pasta para o utilizador actual, e neste exemplo estou a atribuir permissão de controlo total:
@REM Atribuir permissões "full control" para o utilizador actual
icacls "%ProgramFiles%\WindowsApps" /grant "%username%":F /Q
Por fim, atribuímos a permissão “owner” de volta ao utilizador “TrustedInstaller“, para que tudo volta a estar como antes, excepto que agora o nosso utilizador também tem permissões para aceder ao conteúdo da pasta:
@REM Atribuir "owner" de volta ao utilizador "TrustedInstaller"
icacls "%ProgramFiles%\WindowsApps" /setowner "NT Service\TrustedInstaller"
Neste momento, se não recebeu nenhuma mensagem de erro, já deve conseguir aceder ao conteúdo da pasta.
Estas são as definições de permissão da pasta %ProgramFiles%\WindowsApps após seguir os passos acima:

Se algo der errado

Se o processo acima correu mal, tem sempre a opção de restaurar as permissões originais a partir do backup que efectuou logo no início:
@REM Restaurar as permissões originais da pasta "WindowsApps"
icacls "%ProgramFiles%" /restore "%TEMP%\WindowsApps.acl" /Q

script completo ( GrantAccess-WindowsApps.cmd )

@echo Backing up current folder permissions to a temporary file
@icacls "%ProgramFiles%\WindowsApps" /save "%TEMP%\WindowsApps.acl" /Q
@if ERRORLEVEL 1 goto rollback
@echo Assigning the ownership of the folder to the current logged user
@takeown /F "%ProgramFiles%\WindowsApps"
@if ERRORLEVEL 1 goto rollback
@echo Assigning full control on the folder for the current logged user
@icacls "%ProgramFiles%\WindowsApps" /grant "%username%":F /Q
@if ERRORLEVEL 1 goto rollback
@echo Assigning the ownership of the folder back to the "TrustedInstaller" user
@icacls "%ProgramFiles%\WindowsApps" /setowner "NT Service\TrustedInstaller"
@if ERRORLEVEL 1 goto rollback
@goto success
:rollback
@echo.
@echo Error! Rolling back...
@icacls "%ProgramFiles%" /restore "%TEMP%\WindowsApps.acl" /Q
@echo.
@echo Check the error messages above to see why it didn't work
@echo Did you forgot to run as administrator?
@goto end
:success
@echo.
@echo Success! You should have access to the "%ProgramFiles%\WindowsApps" folder
@goto end
:end

Fonte: Caio Proiete
Imagens: Caio Proiete

Gustavo Camargo

3 comentários:

  1. Ótimo tutorial, e não somente isso, o melhor é que tem explicação como funciona a pasta, os porquês, etc, muito obrigado!

    ResponderExcluir