2017-02-22 7 views
-1

C++ Win32APIアプリケーションを使用してWindows Defenderを無効にしようとしています。 これを行うには、Dワードをレジストリに書き込む必要があります(DisableAntiSpyware = 1)。 私はいつも新しいWindowsをインストールした後にそれを手動で行います。 私のコードはここにありますが、動作しません。 誰かが私になぜそれが間違っているか教えてくれるかもしれません。ありがとうございました!C++のWindowsレジストリに32ビットD-Wordを書き込む方法

OK、私はまだ働いていない、コードビット変更した...

 case 1: 

      //::MessageBeep(MB_ICONERROR); 
      ::MessageBox(hWnd, L"Button was Pressed",L"Button was clicked?",MB_OK); 

      LONG 
      SetRegValue 
      (
      const wchar_t* path 
      , const wchar_t *name 
      , const BYTE *value 

       ); 
      { 
       LONG status; 
       HKEY hKey; 

       DWORD value = 0x00000001; 

       status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"\\SOFTWARE\\Policies\\Microsoft\\Windows Defender", 0, KEY_ALL_ACCESS, &hKey); 
       if ((status == ERROR_SUCCESS) && (hKey != NULL)) 
       { 
        status = RegSetValueEx(hKey, L"test", 0, REG_DWORD, (const BYTE*)&value,sizeof(value)); 
        RegCloseKey(hKey); 
       } 
       return status; 

       ::MessageBeep(MB_ICONERROR); 
      } 
     } 
    } 
    break; 
+0

「動作しない」問題の技術的な説明ではありません。

この代わりのようにもっと何かを試してみてください。これを実行すると正確に何が起こりますか?各行の戻りコードは何ですか? – MrEricSir

+2

'RegSetValueEx'を完全に間違って呼び出す方法。 'DWORD d = 1; RegSetValueEx(hKey、L "test"、REG_DWORD、&d、sizeof(d));' – RbMm

+1

あなたはおそらく[レジストリリダイレクタ](https://msdn.microsoft.com/) en-us/library/windows/desktop/aa384232.aspx)、すべてが狂ってしまい、あなたを無視します。 – IInspectable

答えて

1

レジストリキーを開くときには、実際に必要な権限のみを要求する必要があります。だから、KEY_ALL_ACCESSを代わりにKEY_SET_VALUEに置き換えてください。あなたがやっていることはすべて値を書き込んでいるからです。しかし、ユーザーアカウントにWindows Defenderキーへの書き込みアクセス権をあらかじめ与えておかないかぎり、HKEY_LOCAL_MAHCINEに書き込むためには、さらに高度な権限でアプリを実行する必要があります。あなたのコードは、32ビットとしてコンパイルし、64ビットシステム上で動作し、それが64ビットのレジストリへの書き込みに必要がある場合

また、あなたはそうあなたがRegistry Reflection/Registry Redirectionを受ける可能性があるKEY_WOW64_64KEYフラグを含める必要があります。

case 1: 
{ 
    ::MessageBox(hWnd, L"Button was Pressed", L"Button was clicked?", MB_OK); 

    DWORD value = 1; 
    DWORD flags = KEY_SET_VALUE; 

    #if !defined(_WIN64) 
    BOOL bIsWow64Process = FALSE; 
    if (IsWow64Process(GetCurrentProcess(), &bIsWow64Process) && bIsWow64Process) 
     flags |= KEY_WOW64_64KEY; 
    #endif 

    HKEY hKey; 
    LONG status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"\\SOFTWARE\\Policies\\Microsoft\\Windows Defender", 0, flags, &hKey); 
    if ((status == ERROR_SUCCESS) && (hKey != NULL)) 
    { 
     status = RegSetValueEx(hKey, L"DisableAntiSpyware", 0, REG_DWORD, (const BYTE*)&value, sizeof(value)); 
     RegCloseKey(hKey); 
    } 

    ::MessageBeep(MB_ICONERROR); 
} 
break; 
+0

管理者モードでVisual Studioを起動して管理者モードで実行しようとしました。まだ動かない。 –

+0

そして、私は64ビットマシンに32ビットコードを書いています。ありがとうございました! –

1

プログラムが昇格した権限、つまり管理者モードで実行されていない限り、あなたはHKEY_LOCAL_MACHINEの下で任意のキーに書き込むことはできません。 RegOpenKeyExまたはRegSetValueExへのコールは失敗します。

+0

OK、私はこれについて考えていましたが、わかりませんでした。ありがとうございました! 私は管理者モードで実行しようとします。 –

関連する問題