Определение версии ОС (Приоритеты и подводные камни)

Тема в разделе "LANGS.C", создана пользователем JustAGuest, 10 янв 2012.

  1. JustAGuest

    JustAGuest New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2009
    Сообщения:
    33
    Добрый день!
    Странная встретилась вещь: для определения версии ОС пользуюсь всем известными GetVersionEx()/Get[Native]SystemInfo()/GetProductInfo(), что не вызывало ни у кого никаких вопросов, пока для системы Windows 2003 Datacenter SP2 GetVersionEx() не вернула в _OSVERSIONINFOEX.wSuiteMask число 0x192 (400 по-русски).

    Встал вопрос: что оно означает?

    Раскладываем на составляющие:
    + VER_SUITE_SINGLEUSERTS (0х100) - ОК
    + VER_SUITE_TERMINAL (0х10) - ОК
    + VER_SUITE_DATACENTER (0х80) - ОК
    + VER_SUITE_ENTERPRISE (0х02) - ???

    Т.е. мы одновременно и Datacenter, и Enterprise? Как такое возможно и почему система об этом ничего не знает (нулевая чистая установка, с отключенным апдейтом)?

    Порылся в примерах определения и заметил, что при определении часто используют анализ этого значения с некоторым приоритетом, а именно (наиболее типичный код):
    Код (Text):
    1.                 if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
    2.                    StringCchCat(pszOS, BUFSIZE, TEXT( "Compute Cluster Edition" ));
    3.                 else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
    4.                    StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition" ));
    5.                 else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
    6.                    StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition" ));
    7.                 else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
    8.                    StringCchCat(pszOS, BUFSIZE, TEXT( "Web Edition" ));
    9.                 else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard Edition" ));
    Т.е. сначала тестируемся на одно, затем на другое и т.д...
    Но откуда такое знание взялось? Где можно об этом прочесть и убедиться, что именно так нужно делать?

    Всем спасибо!
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    Windows Server Datacenter построен на базе Enterpse, просто увиличено количество памяти и еще что-то не помню уже...
     
  3. JustAGuest

    JustAGuest New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2009
    Сообщения:
    33
    Спасибо, но это только часть предлагаемой в примерах (в т.ч. МСДНовских) цепочки... Сомневаюсь что этот факт можно экстраполировать на две оставшиеся редакции. Как считаете?