无法使用C ++程序禁用Device Manager

时间:2012-03-22 18:37:12

标签: c++ windows

我想从控制面板编辑注册表值中禁用Device Manager。我可以在C#中完成它,但我想在不使用任何.NET框架的情况下在C ++中完成它。我已经成功地用C ++改变了我的处理器名称。但是当我想要禁用任务管理器时,我遇到了问题。这是我的代码。

    HKEY hKey;

    RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                 "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0",
                 0,
                 KEY_SET_VALUE,
                 &hKey);

    RegSetValueEx(hKey, REGNAME_TO_WRITE, 0, REG_SZ,
                  (const unsigned char *)"ProcessorNameString",
                  strlen("ProcessorNameString"));

    //RegCloseKey(hKey);

    // The problem begins here

     RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                  "Software\\Policies\\Microsoft\MMC\\{74246bfc-4c96-11d0-abef-0020af6b0b7a}\\",
                  0,
                  KEY_SET_VALUE,
                  &hKey );

    RegSetValueEx( hKey,"Restrict_Run",0,REG_SZ,
                   (const unsigned char *)"1",
                   strlen("1") );

    RegCloseKey(hKey);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

您应该禁用WOW64注册表重定向,否则您的程序可能会更改WOW6432Node而不是HKEY_LOCAL_MACHINE。

请参阅Disabling registry redirection for a registry key on an x64 platform

答案 1 :(得分:0)

Viola,我得到了解决方案。解决方案是这样的:

DWORD dwVal = 1;

HKEY hKey = HKEY_CURRENT_USER;

RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Policies\\Microsoft\\MMC\\{74246bfc-4c96-11d0-abef-0020af6b0b7a}\\", 0, KEY_ALL_ACCESS, &hKey);

RegSetValueEx (hKey, "Restrict_Run", 0, REG_DWORD, (LPBYTE)&dwVal, sizeof(DWORD));

RegCloseKey(hKey);