Позднее наблюдение.
Как подсказал Фрэнк, REG.EXE отлично работает .
Однако небольшая функция C не может прочитать это конкретное DefaultUserName : API RegQueryValueExA не возвращает ошибку, но имеет размер 1 байт!
В этой же ветке я могу прочитать Shell .
С REGEDIT.EXE я проверяю разрешения, для обоих значений они
Администраторы: Полный, Пользователи: Чтение.
ОС: Windows 7 Home Premium - 64 бит
DWORD RegGetValueA( HKEY hTree, LPCSTR lpSubKey, LPCSTR lpValueName, LPDWORD lpdwType, LPVOID lpData, LPDWORD lpdwSize )
{
#define KEY_WOW64_32KEY 0x0200 // on 64-bit Windows should operate on the 32-bit registry view ( HKLM\SOFTWARE\Wow6432Node\... )
#define KEY_WOW64_64KEY 0x0100 // on 64-bit Windows should operate on the 64-bit registry view
DWORD ret, dwAlter = 0;
HKEY hKey;
retry:
ret = RegOpenKeyExA( hTree, lpSubKey, 0, KEY_READ | dwAlter, &hKey );
if ( ret != ERROR_SUCCESS )
return ret;
ret = RegQueryValueExA( hKey, lpValueName, NULL, lpdwType, lpData, lpdwSize );
RegCloseKey( hKey );
if ( ret != ERROR_SUCCESS && dwAlter == 0 )
{
dwAlter = KEY_WOW64_64KEY;
// printf( "retry... %d\r\n", dwAlter );
goto retry;
}
return ret;
}