|
|
| Посл.отвђт | Сообщен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 Все поправки принимаютса на ура |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.055 |