напомните определение версии Windows

Тема в разделе "WASM.WIN32", создана пользователем valinor, 31 май 2006.

  1. valinor

    valinor New Member

    Публикаций:
    0
    Регистрация:
    7 май 2005
    Сообщения:
    27
    Помню был такой метод определения, работаем ли мы с 9x или NT:
    Код (Text):
    1.  
    2. mov ax, cs
    3. cmp ax, XXX
    4. jg win9x
    5. winNT: ...
    6.  
    7. win9x: ...
    8.  




    Вопрос - чему равно ХХХ?
     
  2. Hellspawn

    Hellspawn New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2006
    Сообщения:
    310
    Адрес:
    Москва
    есть такой =)
    Код (Text):
    1.  
    2. asm
    3.     mov     ecx,cs
    4.     xor     cl,cl
    5.     jecxz   @win9X
    6. @win9X:
    7.   end;
     
  3. jecxz

    jecxz New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2006
    Сообщения:
    75
    Адрес:
    Brazil
    Код (Text):
    1.  
    2. osvi OSVERSIONINFO <?>
    3. mov     osvi.dwOSVersionInfoSize,sizeof OSVERSIONINFO
    4. invoke  GetVersionEx,offset osvi
    5. .if osvi.dwPlatformId == 1
    6.   ; 9x
    7. .endif
    8. .if osvi.dwPlatformId == 2
    9.   ; NT
    10. .endif
    11. .if osvi.dwPlatformId == 2
    12.   ; CE
    13. .endif
    14.  
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Код (Text):
    1. CheckOS  PROTO
    2.  
    3. .DATA?
    4.  
    5. ALIGN DWORD
    6. osvi  OSVERSIONINFO  <>
    7.  
    8. .CODE
    9.  
    10. ALIGN DWORD
    11. CheckOS proc
    12. option PROLOGUE:NONE
    13. option EPILOGUE:NONE
    14.   mov osvi.dwOSVersionInfoSize, SIZEOF OSVERSIONINFO
    15.   invoke GetVersionEx, OFFSET osvi
    16.   .IF eax != 0
    17.      xor eax, eax
    18.      cmp osvi.dwPlatformId, VER_PLATFORM_WIN32_NT
    19.      sete al
    20.   .ENDIF
    21.   ret
    22. option PROLOGUE:PROLOGUEDEF
    23. option EPILOGUE:EPILOGUEDEF
    24. CheckOS endp
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    начальное значение некоторых регистров (например ebx)
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Если без API, то проще и надежнее через PEB
    Код (Text):
    1.   mov ecx,fs:[30h]
    2.   mov eax,[ecx+0Ch]  ;в NT 08h - ImageBase, 0Ch - LdrData, а в 9х оба = 0
    3.   test eax,eax
    4.   je win9x
    5.   ;для NT можно доп-но версию извлечь
    6.   mov eax,[ecx+0A4h] ;OSMajorVersion
    7.   mov edx,[ecx+0A8h] ;OSMinorVersion
    8.   movzx ecx,word ptr [ecx+0ACh] ;OSBuildNumber