私は純粋なC++で小さなアプリケーションを書いています。しかし今、私は奇妙な問題を奨励しています。アプリケーションを自動起動に追加したかったのですが、機能しません。このコードを使用してレジストリにアクセスします。
BOOL SetKeyData(HKEY hRootKey, WCHAR *subKey, DWORD dwType, WCHAR *value, LPBYTE data, DWORD cbData)
{
HKEY hKey;
if(RegCreateKeyW(hRootKey, subKey, &hKey) != ERROR_SUCCESS)
return FALSE;
LSTATUS status = RegSetValueExW(hKey, value, 0, dwType, data, cbData);
if(status != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
RegCloseKey(hKey);
return TRUE;
}
最初は、提供するデータに問題があると思ったので、このようにLPBYTEへのパスを持つWCHARを変換し、次のようにこの関数を実行しました。
size_t i;
char *pMBBuffer = (char *)malloc( MAX_PATH );
wcstombs_s(&i, pMBBuffer, MAX_PATH, my_program, MAX_PATH-1 );
SetKeyData(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", REG_SZ, L"zwApplication", (LPBYTE)pMBBuffer, i))
ステータスコードERROR_ACCESS_DENIEDを取得します。問題はWindows7のポリシーかもしれませんが、HKEY_LOCAL_MACHINEのすべてに完全にアクセスできると思いました。この問題を解決する方法は?