我的注册表有问题。在我的学校里有一些巨魔创建链接和批处理文件来关闭其他人的计算机,方法是将它们放入共享文件夹并为它们提供类似于我们应该使用的文件的名称(例如“tcp.bat”或“tcp.java(。 lnk)”而不是隐藏在子目录中的“tcp.java”,以便学生打开错误文件)。
为此,他们都使用shutdown [args]
or shutdown.exe [args]
。对于我的学校,我编写了一个程序来通过将-t
参数修改为至少一分钟来阻止这种情况,以便学生可以从老师那里得到一些帮助。但是现在我有一个问题:
我认为注册表中有条目指向 shutdown.exe 的完整路径,但没有。我搜索了shutdown.exe
and shutdown
,但发现指向shutdown.exe
. 所以现在我的问题是:
我必须更改使用shutodwn
或shutdown.exe
指向我的程序而不是 shutdown.exe 的位置?
感谢您的任何帮助!
我同意Doug Deden 的评论,这听起来像是一个XY 问题,更改某些访问权限可能是更好的方法。由于无论如何这可能仍然具有一定的价值,因此这里有一个可能的替代方案。
到的路径
shutdown.exe
不是在注册表中设置的,而是在您的PATH
变量中设置的。shutdown.exe
位于C:\Windows\System32
,它列在您的PATH
变量中。为了自己找到它,您可以运行where shutdown
.一种选择是命名您的程序
shutdown.exe
或shutdown.bat
在您喜欢的任何位置,然后将该位置添加到变量的前面。PATH
然后运行时
where shutdown
,您会看到类似以下内容:此列表按优先顺序排列,因此除非另有说明,否则 Windows 将运行列表中的第一项。这可以阻止任何只是跑步的人
shutdown -s -t 0
,但不能阻止任何跑步的人C:\Windows\system32\shutdown -s -t 0
。进一步阅读
回答你问的问题(剧透 - 它不会解决你的问题)......
打开命令提示符并键入:
该目录列表是 Windows 查找可执行文件的地方(在当前目录之后),从左到右工作,直到找到匹配
.exe
或失败。如果您在用户的 PATH 变量中插入一个文件夹,c:\windows\system32;
例如c:\myscripts;c:\windows\system32;
您c:\myscripts\shutdown.exe
将首先找到。您可能需要同时更新系统和每个用户的 PATH 变量以确保找到您的 shutdown.exe,但这很容易被破坏。有多种方法可以通过脚本或编译代码甚至
rundll32.exe
. 这也不会阻止到真实文件的绝对或相对路径。Shutdown.exe
只是一种方便,它不是 Windows 关闭的核心。也就是说,我不会尝试篡改文件本身,虽然您可能会让您的版本“坚持”,但 Windows 将其替换为原始版本只是时间问题。就个人而言,我会认真查看组或本地策略(取决于您的网络),以撤销问题用户的关机权限。用户是否运行 exe 并不重要,如果他们没有关闭机器的权限,则操作将失败。
如果您出于某种原因无法锁定系统,您的选择将非常有限。
也许不是编写关机替换,而是在文件服务器上按计划运行脚本(或编写服务等)扫描任何可疑文件,如 .lnk 或 .bat 文件并删除它们(或者更好的是取得所有权并撤销访问该文件,以便您可以检查/记录创建它的人/哪台计算机等)并采取任何行动。
您可以通过在共享文件夹上使用文件系统观察器(来自文件服务器本身!),使用一些代码更进一步,您的应用程序将几乎实时地收到每个新文件名的通知,您可以采取任何行动。(比如关闭攻击者的电脑 :)