c# - 以编程方式禁用任务管理器 (ctrl+alt+del)
问题描述
我目前正在开发一个应用程序来更轻松地配置 Win10 IoT 机器。想象一下,一个用户在使用自定义 shell 并且几乎所有预定义的快捷方式都被禁用,因此他只能使用生产应用程序。然而,为了切换用户和配置系统,“Win+L”必须保持启用。现在在出现的“Win+L”屏幕中,他仍然可以找到进入任务管理器的选项(这是不希望的)。管理员可以防止这种情况发生是使用 gpedit 并更改机器上的 ctrl+alt+del 选项。这正是我想做的。
非常接近,但是此注册表项仅适用于当前登录的用户,在我的情况下是管理员,因为配置工具需要管理权限(可以配置 UWF 过滤器等)。
如果我在 LocalMachine 而不是 CurrentUser 中尝试相同的操作,则会按预期创建注册表项,但它根本没有任何效果。
预先感谢您的帮助。
解决方案
我找到了一种方法来实现我想要的:
public void SetTaskManager(bool enable)
{
// Load settings of desired user via UserName property
using (PowerShell PowerShellInstance = PowerShell.Create())
{
var command = Properties.Settings.Default.LoadRegistryOfUser;
command = command.Replace("USERNAME", UserName);
PowerShellInstance.AddScript(command);
var res = PowerShellInstance.Invoke();
}
// Create the key and entry for the registry or delete it if
// enable == true
RegistryKey objRegistryKey = Registry.Users.CreateSubKey(
UserName + @"\Software\Microsoft\Windows\CurrentVersion\Policies\System");
if (enable && objRegistryKey.GetValue("DisableTaskMgr") != null)
objRegistryKey.DeleteValue("DisableTaskMgr");
else
objRegistryKey.SetValue("DisableTaskMgr", "1", RegistryValueKind.DWord);
objRegistryKey.Close();
// Close the registry of the user, otherwise he cant log on
using (PowerShell PowerShellInstance = PowerShell.Create())
{
var command = Properties.Settings.Default.CloseRegistryOfUser;
command = command.Replace("USERNAME", UserName);
PowerShellInstance.AddScript(command);
var res = PowerShellInstance.Invoke();
}
}
脚本:
LoadRegistryOfUser: reg load HKU\USERNAME C:\users\USERNAME\NTUSER.DAT
CloseRegistryOfUser: reg unload HKU\USERNAME
它有点hacky,但到目前为止我发现的唯一方法。希望这可以帮助。
推荐阅读
- java - 有没有比解析堆栈跟踪以获取当前正在运行或调用的方法更好的方法?
- wordpress - Wordpress 自定义端点显示 404
- javascript - 如何防止用户使用 jQuery 或 JavaScript 在每个记录行上选择多个单选按钮
- r - R中的Logistic分布集成
- scala - Apache pulsar:Akka 流 - 消费者配置
- javascript - : 在选择器箭头之前
- javascript - 根据窗口大小缩放变换
- javascript - 为什么在容器的状态树中只修改了一个子节点的状态时,容器的所有 PureComponent 子节点都会更新?
- csv - 关于Emeditor中的列编辑问题
- python - 为什么相等在 Python 中似乎不是对称关系?