Parecchio tempo fa (quindi non chiedermi dove) ho trovato il codice che fa proprio quello che dici tu:
codice:
char* getWindowsVers(){
 OSVERSIONINFOEX osvi;
 BOOL bOsVersionInfoEx;
 char *temp;
 
 ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
   {
      osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
      if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
         return FALSE;
   }
 
 switch (osvi.dwPlatformId)
   {
      // Test for the Windows NT product family.
      case VER_PLATFORM_WIN32_NT:

         // Test for the specific product family.
         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
            temp = "Microsoft Windows Server 2003 family";

         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
            temp= "Microsoft Windows XP ";

         if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
            temp= "Microsoft Windows 2000 ";

         if ( osvi.dwMajorVersion <= 4 )
            temp= "Microsoft Windows NT ";

         // Test for specific product on Windows NT 4.0 SP6 and later.
         if( bOsVersionInfoEx )
         {
            // Test for the workstation type.
            if ( osvi.wProductType == VER_NT_WORKSTATION )
            {
               if( osvi.dwMajorVersion == 4 )
                  lstrcat(temp,"Workstation ");
               else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
                  lstrcat(temp,"Home Edition ");
               else
                  lstrcat(temp,"Professional ");
            }

         }

      // Test for the Windows 95 product family.
      case VER_PLATFORM_WIN32_WINDOWS:

         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
         {
             temp = "Microsoft Windows 95 ";
             if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
                lstrcat(temp,"OSR2 " );
         } 

         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
         {
             temp = "Microsoft Windows 98 ";
             if ( osvi.szCSDVersion[1] == 'A' )
                lstrcat(temp,"SE " );
         } 

         if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
         {
             temp = "Microsoft Windows ME";
         } 
         break;

      case VER_PLATFORM_WIN32s:

         temp = "Microsoft Win32s";
         break;
   }
   return temp;
}