2012-03-22 3 views
1

내 제어판 편집 레지스트리 값에서 Device Manager을 비활성화하고 싶습니다. C#에서 할 수 있지만 .NET Framework를 사용하지 않고 C++에서 수행하려고합니다. C++에서 프로세서 이름을 변경하려고 succided했습니다. 하지만 작업 관리자를 사용하지 않으려는 경우 문제가 발생합니다. 여기 내 코드가있다.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; 
} 
+0

어떤 버전의 Windows입니까? 어떤 프로세서 아키텍처입니까? 아마도 32 비트 코드를 실행하고 레지스트리의 32 비트보기 (WOW64 리디렉션)를 변경하지만 Windows는 64 비트 레지스트리를 찾고있을 것입니다. –

+0

Windows 7 Professional Edition 32 비트를 사용하고 있습니다. –

답변

0

비올라를 참조하십시오. 해결책은 다음과 같습니다.

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); 
1

당신은 WOW64 레지스트리 리디렉션을 사용하지 않아야합니다, 또는 다른 프로그램이 WOW6432Node 대신 HKEY_LOCAL_MACHINE을 변경할 수 있습니다.

나는 해결책을 가지고, Disabling registry redirection for a registry key on an x64 platform

+0

응답 해 주셔서 감사합니다. 그러나 HKEY hKey는 어떨까요? 'RegOpenKeyEx (HKEY_LOCAL_MACHINE, "HARDWARE \\ DESCRIPTION \\ 시스템 \\ CentralProcessor \\ 0" KEY_SET_VALUE, 및 HKEY); RegSetValueEx (HKEY, REGNAME_TO_WRITE, 0, REG_SZ, (CONST 서명 숯불에 *) "ProcessorNameString" 나 strlen ("ProcessorNameString은")); '코드의이 부분은 완벽하게 내 프로세서'이름을 변경 않습니다. 나머지 코드에서는 무엇이 문제입니까? 윈도우 7 프로페셔널 에디션을 사용하고 있습니다. –

관련 문제