2013-12-01 3 views
0

У меня есть проблема :(Бруса чтение строки из реестра

bool LoadStorePath(std::wstring &storePath) 
{ 
    HKEY hKey; 
    DWORD key = 0; 
    LONG result; 
    unsigned long type, size=sizeof(DWORD); 
    result = RegOpenKeyExW(HKEY_LOCAL_MACHINE,L"Software\\Microsoft\\Windows\\CurrentVersion",0,KEY_QUERY_VALUE,&hKey); 
    if(result == ERROR_SUCCESS) 
    { 
     result = RegQueryValueExW(hKey,L"CryStore",NULL, NULL, (LPBYTE)&storePath,&size); 
     RegCloseKey(hKey); 
    } 
    return storePath.empty(); 
} 

Строка в реестре «D: \ CryptStore» Этого код нужно прочитать строку из реестра, но в оленьей коже Im пытается отладить и нашла. после вызова размера RegQueryValueExW 28 я думаю, что его мои строки Len, но почему его не writed к storePath парам?

Привет!

+0

Что находится в 'storePath' после вызова' RegQueryValueExW() '? – JBL

+0

Ничего (емкость = 7). Но я нашел несколько интересных. результатом будет 234 (ERROR_MORE_DATA). Так как я понимаю, что размер пути к хранилищу мал. Как увеличить размер? – user2598575

ответ

1

Кажется, что ваш размер переменной содержит неправильное значение. Из MSDN article on RegQueryValueEx о параметре размера:

Указатель на переменную, которая определяет размер буфера, указанного параметром lpData, в байтах. Когда функция возвращается, эта переменная содержит размер данных, скопированных в lpData.

Вроде бы неправильно в вашем коде, как у вас есть size=sizeof(DWORD), которые, очевидно, будут слишком малы, чтобы содержать путь, который вы пытаетесь принести, как вы заметили, с size будучи 28 после вызова, 28 является размером данных, которые нужно прочитать (и это объясняет ERROR_MORE_DATA, который, я думаю, в значительной степени объясняет себя).

Вы должны немного переделать свой код, чтобы передать правильный размер и буфер такого размера.

0

Я думаю, что четвертый параметр должен быть REZ_SZ в RegQueryValueEx

Смежные вопросы