You have to reset the value of size on each loop iteration
void Registry::enum_key()
{
int i = 0;
while( RegEnumKeyEx(hkey , i , name , &size , 0 , 0 , 0 , &filetime) != ERROR_NO_MORE_ITEMS)
{
cout << i << ":" << name << endl;
i++;
size = sizeof(name);
}
}