Доброго времени суток! Суть проблемы вот в чем: мне необходимо из реестра вытащить имя процессора. Вот мой код: Code: HKEY hKey; res = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0", 0, KEY_QUERY_VALUE, &hKey); if(res != ERROR_SUCCESS) cout << "RegOpenKeyEx() failed with code " << res << endl; res2 = RegQueryValue(hKey, "ProcessorNameString", proc, (long*)1024); if(res2 != ERROR_SUCCESS) cout << "RegQueryValue() failed with code " << res2 << endl; так вот при таком раскладе оно пишет мне RegQueryValue() failed with code 2. однако я точно знаю что поле ProcessorNameString у меня есть. пробовал дебагить и обнаружил одну странную вещь(хотя может так и должно быть ): когда навожу курсор на hKey в ф-ции RegQueryValue, оно мне показывает что CXX0030: Error: expression cannot be evaluated. я так подозреваю что тут что-то не так. что же я не правильно сделал? ЗЫ: в гугле я искал, везде пишут что с указателями проблема при такой ошибке: там память не выделил, там еще что-то. но тут вроде такого нет.
LONG myBufSiz = 1024; RegQueryValue(hKey, "ProcessorNameString", proc, &myBufSiz); lurk more this fuckin MSDN! )
maked0n, тем, что последний аргумент, это указатель на данные, а не сами данные. В результате, функция не может изменить значение константы и вылетает.
в результате функция вызовет access violation при обращении по адресу 1024 ( 0x00000400) Code: int _tmain(int argc, _TCHAR* argv[]) { HKEY hk; char buff[512]; LONG rc, bsize = 512; rc = RegOpenKey(HKEY_LOCAL_MACHINE, "Hardware\\DESCRIPTION\\System\\CentralProcessor\\0", &hk); if(rc == ERROR_SUCCESS) { RegQueryValueEx(hk, "ProcessorNameString",NULL,NULL,(LPBYTE)buff,(LPDWORD)&bsize); MessageBox(0, buff,0,0); } else { wsprintf(buff, "RegOpenKey excepted with code %08X", rc); MessageBox(0, buff,0,0); } return 0; } все работает