Создать новые данные в ключе реестра? - PullRequest
0 голосов
/ 21 декабря 2011

Я просто создаю новый раздел реестра MyTestApp и хочу добавить в него новые данные, но не знаю как. Итак, у меня есть следующий код.

bool CreateSectionDataRegistry(CString sectionData, CString sectionValue)
{
    HKEY hKey;      //registry key handle
    LONG lResult;   //result of registry operations
    DWORD dwType, dwSize=0;

    //try to open the key that we are currently pointing at with rootPath
    lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, rootPath + "\\" + "MyTestApp", NULL, KEY_ALL_ACCESS, &hKey);

    if (lResult == ERROR_SUCCESS || lResult == ERROR_MORE_DATA)
    {
        //we have successfully opened the registry key. Now try to access the data
        lResult = RegQueryValueEx(HKEY_LOCAL_MACHINE, sectionData, 0, &dwType, NULL, &dwSize); 

        if(lResult == ERROR_SUCCESS || lResult == ERROR_MORE_DATA)
        {
                          //data already exists, so just return
            RegCloseKey(hKey);
            return true;
        }
        else//section data does not exist, so create new data
        {           
            DWORD dwDisposition;
            lResult = RegCreateKeyEx(HKEY_LOCAL_MACHINE, sectionData, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisposition);
            RegCloseKey(hKey);
            return true;
        }   
    }

    return false;
}

Но когда я отслеживаю вызов RegCreateKeyEx(), он возвращает успех, но данные не создаются ни в разделе реестра MyTestApp, ни в каком-либо месте реестра. Использую ли я правильную функцию для создания новых данных в MyTestApp. Также из приведенного выше аргумента у меня есть CString sectionValue, так как мне проверить, нужно ли мне создавать данные для REG_SZ или REG_DWORD?

Спасибо!

1 Ответ

0 голосов
/ 21 декабря 2011

Кажется, мне просто нужно вызвать RegSetValueEx (), чтобы создать значение реестра в MyTestApp. Возможно, только я, но когда я смотрю на определение RegSetValueEx () на веб-сайте Microsoft, он говорит «установить значение», но не говорит, что значение не существует, он создает значение.

LPTSTR lpszData = new TCHAR[sectionValue.GetLength() + 1];
_tcscpy(lpszData, sectionValue);
lResult = RegSetValueEx(hKey, sectionData, 0, REG_SZ, (LPBYTE)lpszData, sectionValue.GetLength());  

Так что теперь он создает значение реестра, однако я все еще не могу сказать, является ли sectionValue REG_SZ или REG_DWORD.

...