· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› GetVersionEx.

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Ноя 21, 2003 14:30:35

Собственно сабж, нужно отличить семейство 9x, MSDN уже смотрел-
какая-то каша :-), например, osvi.dwMajorVersion==4 для 9x и для
NT, ничего не понимаю ;-)
Вобщем примеры кода приветствуются.


Дата: Ноя 21, 2003 14:51:11

теперь minor смотри, для 98 - 10, для МЕ - 90 etc.


Дата: Ноя 21, 2003 15:40:30 · Поправил: Asterix

Т.е. как я понимаю приблизительно такой код должен работать?

    mov osvi.dwOSVersionInfoSize, sizeof OSVERSIONINFO
    invoke GetVersionEx, OFFSET osvi
    test eax, eax
    jz @F 
     .IF (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && ((osvi.dwMajorVersion == 4) && ((osvi.dwMinorVersion == 0) || (osvi.dwMinorVersion == 10) || (osvi.dwMinorVersion == 90)))
         xor eax, eax
         inc eax
         ret
     .ENDIF
     xor eax, eax
@@:
     ret


Дата: Ноя 21, 2003 16:15:00

Чтобы тока отличить 9х от НТ достаточно проверить старший бит у результата GetVersion()


Дата: Ноя 21, 2003 16:58:06

А зачем так усложнятса?

mov ax, cs
test ah, ah
jz @@NT


Дата: Ноя 21, 2003 17:44:37

merlin

А объяснить ПОЧЕМУ так происходит, можешь? ;)


Дата: Ноя 21, 2003 17:50:15 · Поправил: merlin

По просьбе объесняю...

Селекторы в 9x на програмы user'а ВСЕГДА болше 100h (обычно 167h),
а в NT они всегда меньше 100h (обычно 1Ch).

Я надеюсь что теперь понятно.


Дата: Ноя 21, 2003 18:01:09 · Поправил: merlin

Я конечно понимаю что это не полное объяснение,
но объяснить это по полному у меня не хватит
место. Всё заложено в распредиление селекторов
под разными ось'ями.


Дата: Ноя 21, 2003 21:10:29

Dr.Golova

Microsoft почему-то рекомендует GetVersionEx..


Дата: Ноя 21, 2003 21:19:42

merlin

Это не объяснение. Все равно что комментировать где-то так:

inc eax ;увеличить eax

И так все понятно! ПОЧЕМУ селекторы такие?


Дата: Ноя 21, 2003 21:26:35

Так как в GetVersion перепутаны биты :)
Потому и добавили новую функцию (правда, расширенную) GetVersionEx


Дата: Ноя 21, 2003 21:30:22

[ IceStudent: Так как в GetVersion перепутаны биты :)]

Не думаю что это причина, кто использовал GetVersion в своих программах
обязан разобраться что там Microsoft перепутала, главное чтоб функция работала.


Дата: Ноя 21, 2003 21:37:12

Asterix
Это я к тому, что Microsoft® рекомендует новую функцию...

А вообще-то есть хоть одна новая функция, которую они не рекомендуют?


Дата: Ноя 21, 2003 23:07:39 · Поправил: merlin

volodya
Да я понимаю.
Просто не было времени объясьнят по нормальному. Sorry.

all
Попытаюсь объяснит в кратцэ...
Если по честному тогда можно просто написать про
этот топик целую статъю.

Я надеюсь что всем известно что такое GDT и LDT.
Возмём для начала 9х (в котором я слабоват, так что если
чего неправильно попрошу не бить). Известно что
в 9х используютса LDT. Каждая новая програма получает
свой собствений LDT. GDT остаётса одна для всех!
Если прочесть LDT (в айсе например), тогда можно увидеть
что все нижние селекторы зарезервированы и имеют DPL 0.
Так как в тонкостях PM я не столь силён не смогу дать
к этому явных причин. По большому счёту это сплошной геморой,
из за этого системы NT реализованы по другому.

В NT нету LDT, есть только GDT. GDT меняетса для каждой
програмы, но при этом её скелет остаётса одинаковым!
Поэтому нет особеного смысла использовать большие селектора
и при этом увеличевать GDT.

Как я сказал ранще, про эту тему можно написать довольно
таки длиную статъю. На все вопросы: как, зачем и почему,
я не смогу ответит здесь из за двух причин:
1) Недостаток знаний по сабжу
2) Не хочу разбухиват форум на отрывках информации


Дата: Ноя 21, 2003 23:13:03

Все поправки принимаютса на ура

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.055