
Depois de alterar a propriedade dos executáveis no diretório do Windows ( explorer.exe
, regedit.exe
, etc.), não consigo voltar a TrustedInstaller
usar icacls.exe
. Usando o método GUI (Propriedades → Segurança → Avançado → Proprietário) funciona bem.
Fazendo a mesma coisa com qualquer outro arquivo no Windows, ou sejanãoum executável, funciona bem. Tentei o mesmo no modo de segurança, sem sorte.
Estes são os 2 comandos básicos que estou usando:
takeown /F C:\Windows\explorer.exe /A
icacls C:\Windows\explorer.exe /setowner "NT SERVICE\TrustedInstaller"
Editar: Esqueci de mencionar que estou recebendo o erro 'Acesso negado'.
C:\Windows\System32>takeown /F c:\Windows\explorer.exe /A
SUCCESS: The file (or folder): "c:\Windows\explorer.exe" now owned by the administrators group.
C:\Windows\System32>icacls c:\Windows\explorer.exe /setowner "NT SERVICE\TrustedInstaller"
c:\Windows\explorer.exe: Access is denied.
Successfully processed 0 files; Failed processing 1 files
Responder1
Portanto, o título diz restaurando o TrustedInstaller.
Parece que falta uma parte; removendo as permissões adicionadas do grupo Administradores.
takeown /F "C:\Windows\regedit.exe" /A
/F - file to become owner of
/A - means it will set the users group (ie. Administrators, not userxyz)
icacls "C:\Windows\regedit.exe" /grant Administrators:F
/grant - will add permissions
:F - Full Control
icacls "C:\Windows\regedit.exe" /setowner "NT SERVICE\TrustedInstaller"
/setowner - new owner
icacls "C:\Windows\regedit.exe" /grant:r Administrators:RX
/grant:r - will set permissions (removing higher ones)
:RX - Read and Execute
Referência: https://ss64.com/nt/icacls.html
Responder2
O comando funciona somente após conceder permissões completas ao grupo Administradores, ou seja:
icacls c:\Windows\explorer.exe /grant Administrators:f
Mesmo conceder 'Modificar' não parece ser suficiente por algum motivo.
Responder3
O problema, como você descobriu na sua resposta, é que definir o proprietário de um arquivo requer uma permissão especial, especificamente "assumir propriedade". A razão pela qual a GUI do editor ACL é capaz de definir o proprietário de qualquer maneira é que ela permite oSeTakeOwnershipPrivilege
privilégio, o que permite substituir essa verificação de acesso. Os programas executados como administrador têm esse privilégio, mas precisam ativá-lo explicitamente antes de usá-lo, o que aparentemente icacls
não o faz.
Convenientemente, os processos herdam os privilégios de seus pais por padrão, portanto, se você puder habilitar esse privilégio para o prompt de comando a partir do qual você invoca icacls
, o utilitário também terá o privilégio habilitado e poderá definir o proprietário. Você pode usar meu utilitário de código abertoSprintDLLpara chamar as funções Win32 apropriadas para habilitar o privilégio no processo pai do SprintDLL (o prompt de comando):
SprintDLL call kernel32.dll!OpenProcess /return native /into prochandle (int 0x400, int 0, slotdata parentpid); newslot native token; call advapi32.dll!OpenProcessToken /return int (slotdata prochandle, int 0x20, slotptr token); newslot block luid = int 0, int 0; call advapi32.dll!LookupPrivilegeValueW /return int (nullptr, lpwstr "SeTakeOwnershipPrivilege", slotptr luid); newslot block privs = int 1, slotdata luid, int 2; call advapi32.dll!AdjustTokenPrivileges /return int (slotdata token, int 0, slotptr privs, slotsize privs as int, nullptr, nullptr)
Se funcionar, a saída dirá que todas as três funções chamadas retornaram 1. Você poderá então usar icacls
como tentou originalmente.
Responder4
Isso funcionou para mim no sistema de 64 bits (e no meu problema) ...
icacls c:\Windows\SysWOW64\usercpl.dll /grant Administrators:f
icacls "C:\Windows\SysWOW64\usercpl.dll" /setowner "NT SERVICE\TrustedInstaller"
/setowner – novo proprietário