Estou com um problema no registro. Na minha escola existem alguns trolls que criam links e arquivos em lote para desligar os computadores de outras pessoas, colocando-os em pastas compartilhadas e dando-lhes nomes semelhantes aos arquivos que devemos usar (por exemplo, "tcp.bat" ou "tcp.java(. lnk)" em vez de "tcp.java", que está oculto em um subdiretório para que os alunos abram o arquivo inválido).
Para fazer isso, todos eles usam shutdown [args]
ou shutdown.exe [args]
. Para minha escola, escrevi um programa para interromper isso, modificando o -t
argumento para pelo menos um minuto, para que os alunos possam obter ajuda de um professor. Mas agora estou com um problema:
Eu pensei que existem entradas no registro que apontam para o caminho completo do shutdown.exe, mas nada. Eu procurei por shutdown.exe
e shutdown
, mas encontrei uma observação apontando para o shutdown.exe
. Então agora minha pergunta:
O que eu tenho que mudar onde fazer usando shutodwn
ou shutdown.exe
aponta para o meu programa ao invés do shutdown.exe?
Obrigado por qualquer ajuda!
Concordo com o comentário de Doug Deden de que isso soa como um problema XY e alterar algumas permissões de acesso é provavelmente uma maneira melhor. Como isso ainda pode ter algum valor independentemente, aqui está uma alternativa possível.
O caminho para
shutdown.exe
não está definido no registro, mas em suaPATH
variável.shutdown.exe
está localizado emC:\Windows\System32
, que está listado em suaPATH
variável. Para descobrir isso por si mesmo, você pode executarwhere shutdown
.Uma opção é nomear seu programa
shutdown.exe
oushutdown.bat
em qualquer local de sua preferência e, em seguida, adicionar esse local à frente daPATH
variável.Quando você executar
where shutdown
, verá algo como:Essa lista está em ordem de prioridade, portanto, o Windows executará o primeiro item da lista, a menos que especificado de outra forma. Isso funcionaria para impedir qualquer um que simplesmente corresse
shutdown -s -t 0
, mas não qualquer um que corresseC:\Windows\system32\shutdown -s -t 0
.Leitura adicional
Para responder à pergunta que você fez (spoiler - não resolverá seu problema)...
abra um prompt de comando e digite:
Essa lista de diretórios é onde o Windows procura por arquivos executáveis (após o diretório atual), trabalhando da esquerda para a direita até encontrar uma correspondência
.exe
ou falhar. Se você inserir uma pasta na variável PATH de seus usuários antes,c:\windows\system32;
por exemplo ,c:\myscripts;c:\windows\system32;
a suac:\myscripts\shutdown.exe
será encontrada primeiro.Pode ser necessário atualizar o sistema e as variáveis PATH de cada usuário para garantir que seu shutdown.exe seja encontrado, mas isso pode ser facilmente derrotado. Existem vários métodos para desligar um computador via script ou código compilado ou até mesmo
rundll32.exe
. Além disso, isso não impedirá caminhos absolutos ou relativos para o arquivo real.Shutdown.exe
é apenas uma conveniência, não é essencial para o desligamento do Windows. Dito isso, eu não tentaria adulterar o arquivo em si, embora você possa fazer com que sua versão "grude", é apenas uma questão de tempo até que o Windows o substitua pelo original.Pessoalmente, eu consideraria seriamente a política de grupo ou local (dependendo da sua rede) para apenas revogar as permissões de desligamento para os usuários problemáticos. Não importa se um usuário executa o exe, se ele não tiver permissão para desligar a máquina, a operação falhará.
Se você não pode bloquear os sistemas por qualquer motivo, suas opções são bastante limitadas.
Talvez, em vez de escrever uma substituição de desligamento, execute um script em uma programação (ou escreva um serviço, etc.) em seu servidor de arquivos que verifique se há arquivos suspeitos como arquivos .lnk ou .bat e os exclua (ou melhor ainda, tome posse e revogue acesso ao arquivo para que você possa inspecionar/registrar quem o criou/qual computador, etc.) e executar qualquer ação.
Você pode levar isso ainda mais longe com algum código usando um observador do sistema de arquivos na pasta compartilhada (do próprio servidor de arquivos!), Seu aplicativo será notificado de cada novo nome de arquivo criado praticamente em tempo real e você poderá executar qualquer ação. (como desligar o computador do invasor :)