【发布时间】:2018-06-30 18:15:03
【问题描述】:
我去了here 做了一个测试程序,看看它是否真的禁用了任务管理器。基本上是一个简单的布尔开关,然后关闭以查看任务管理器是否实际上被禁用。当我编译并运行它时,它按预期工作。
编辑:代码现在看起来像这样
#include <iostream>
#include <Windows.h>
using namespace std;
void LockTaskManager(bool Lock);
void main(void) {
LockTaskManager(true);
cout << "Testing task manager disable." << endl;
getchar();
LockTaskManager(false);
cout << "Testing task manager enabled." << endl;
getchar();
}
void LockTaskManager(bool Lock)
{
HKEY currKey;
DWORD dwDisposition;
DWORD dwType, dwSize;
DWORD value;
if (Lock)
value = 1;
else
value = 0;
LRESULT lResult = RegOpenCurrentUser(KEY_WRITE, &currKey);
if (RegCreateKeyEx(currKey,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\system"),
0,
NULL,
0,
KEY_SET_VALUE,
NULL,
&currKey,
&dwDisposition) == ERROR_SUCCESS)
{
dwType = REG_DWORD;
dwSize = sizeof(DWORD);
RegSetValueEx(currKey, TEXT("DisableTaskMgr"), 0, dwType, (PBYTE)&value, dwSize);
RegCloseKey(currKey);
}
}
但是,在我将 .exe 移动到同一台计算机上的来宾用户之后,它并没有禁用任务管理器。因此,我从微软的 MSDN here 中研究了它是如何以及为什么工作的,我发现 HKEY_CURRENT_USER 不会更改,并且需要使用 RegOpenCurrentUser 将当前密钥设置为运行该程序的用户。我知道this 的帖子,但答案不是决定性的。
话虽如此,我想知道解决这个问题的正确方法。这里的目标是让运行此代码.exe的任何人都无法运行任务管理器。
仅供参考,只要读到这篇文章的人都知道,我打算在触发标志的情况下将其用作防御机制,我想阻止恶意实体通过任务管理器杀死该进程。
【问题讨论】:
-
您是否使用 regedit 检查过该值是否已设置?
-
如果您不使用模拟 - 通话毫无意义
RegOpenCurrentUser -
你明白你在做什么吗?什么毫无意义的电话
RegOpenCurrentUser?我指出你的错误 -
不管怎样,你必须在待命的客人
RegCreateKeyEx987654328@下遇到错误访问被拒绝 -
documentation 还说:“
HKEY_CURRENT_USER键映射到HKEY_USERS键中的当前用户分支的根。” i> 除非您明确加载其他用户的个人资料(您的问题并未声称您是),否则您的问题是不同的,RegOpenCurrentUser不是解决方案。不要问你的解决方案。而是询问您的问题。首先实施适当的错误报告。
标签: c++ winapi registry taskmanager