небольшая проблема с GetVersionEx

Тема в разделе "WASM.BEGINNERS", создана пользователем integer, 29 янв 2009.

  1. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
    Код (Text):
    1. .code
    2.     WF db "dwOSVersionInfoSize: %lu",13,10
    3.     db "dwMajorVersion: %lu",13,10
    4.     db "dwMinorVersion: %lu",13,10
    5.     db "dwBuildNumber: %lu",13,10
    6.     db "dwPlatformId: %lu",13,10
    7.     db "szCSDVersion: %s",13,10
    8.     db "wServicePackMajor: %hu",13,10
    9.     db "wServicePackMinor: %hu",13,10
    10.     db "wSuiteMask: ???",13,10
    11.     db "wProductType: ???",0
    12.  
    13. Main proc
    14.     local  osvi : OSVERSIONINFOEX
    15.     local  buff [1024] : byte
    16.  
    17.     mov     osvi.dwOSVersionInfoSize,sizeof OSVERSIONINFOEX
    18.     invoke  GetVersionEx,addr osvi
    19.     invoke  wsprintf,addr buff,addr WF,osvi.dwOSVersionInfoSize,osvi.dwMajorVersion,osvi.dwMinorVersion,osvi.dwBuildNumber,osvi.dwPlatformId,addr osvi.szCSDVersion,osvi.wServicePackMajor,osvi.wServicePackMinor
    20.     invoke  MessageBox,0,addr buff,0,MB_OK
    21.  
    22.     invoke  ExitProcess,0
    23. Main endp
    24. end Main
    как получить wSuiteMask и wProductType ?
    на osvi.wSuiteMask и osvi.wProductType ругается компилятор.
     
  2. Coderess

    Coderess New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2008
    Сообщения:
    41
    Попробуй так:

    Код (Text):
    1. .data?
    2. osvi OSVERSIONINFOEX <?>
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    похоже что просто в определении структуры нет этих полей, покажи как структура у тя описана
     
  4. Coderess

    Coderess New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2008
    Сообщения:
    41
    Да, действительно:

    Код (Text):
    1. Masm
    2.  
    3. OSVERSIONINFOEXA STRUCT
    4.   dwOSVersionInfoSize DWORD ?
    5.   dwMajorVersion  DWORD ?
    6.   dwMinorVersion  DWORD ?
    7.   dwBuildNumber   DWORD ?
    8.   dwPlatformId    DWORD ?
    9.   szCSDVersion    BYTE  128  dup (?)
    10.   wServicePackMajor WORD ?
    11.   wServicePackMinor WORD ?
    12.   wReserved       WORD 2 dup (?)
    13. OSVERSIONINFOEXA ENDS
    14.  
    15. MSDN
    16.  
    17. typedef struct _OSVERSIONINFOEX {
    18.   DWORD dwOSVersionInfoSize;
    19.   DWORD dwMajorVersion;
    20.   DWORD dwMinorVersion;
    21.   DWORD dwBuildNumber;
    22.   DWORD dwPlatformId;
    23.   TCHAR szCSDVersion[128];
    24.   WORD  wServicePackMajor;
    25.   WORD  wServicePackMinor;
    26.   WORD  wSuiteMask;
    27.   BYTE  wProductType;
    28.   BYTE  wReserved;
    29. } OSVERSIONINFOEX,
    30.  *POSVERSIONINFOEX,
    31.  *LPOSVERSIONINFOEX;
     
  5. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
    дополнил структуру
    Код (Text):
    1. OSVERSIONINFOEXA STRUCT
    2.   dwOSVersionInfoSize DWORD ?
    3.   dwMajorVersion  DWORD ?
    4.   dwMinorVersion  DWORD ?
    5.   dwBuildNumber   DWORD ?
    6.   dwPlatformId    DWORD ?
    7.   szCSDVersion    BYTE  128  dup (?)
    8.   wServicePackMajor WORD ?
    9.   wServicePackMinor WORD ?
    10.   wSuiteMask        WORD ?
    11.   wProductType      BYTE ?
    12.   wReserved         BYTE ?
    13. OSVERSIONINFOEXA ENDS
    дописал код
    Код (Text):
    1. .code
    2.     WF db "dwOSVersionInfoSize: %lu",13,10
    3.     db "dwMajorVersion: %lu",13,10
    4.     db "dwMinorVersion: %lu",13,10
    5.     db "dwBuildNumber: %lu",13,10
    6.     db "dwPlatformId: %lu",13,10
    7.     db "szCSDVersion: %s",13,10
    8.     db "wServicePackMajor: %hu",13,10
    9.     db "wServicePackMinor: %hu",13,10
    10.     db "wSuiteMask: %u",13,10
    11.     db "wProductType: %u",0
    12.  
    13. Main proc
    14.     local  osvi : OSVERSIONINFOEX
    15.     local  buff [1024] : byte
    16.  
    17.     mov     osvi.dwOSVersionInfoSize,sizeof OSVERSIONINFOEX
    18.     invoke  GetVersionEx,addr osvi
    19.     invoke  wsprintf,addr buff,addr WF,osvi.dwOSVersionInfoSize,osvi.dwMajorVersion,osvi.dwMinorVersion,osvi.dwBuildNumber,osvi.dwPlatformId,addr osvi.szCSDVersion,osvi.wServicePackMajor,osvi.wServicePackMinor,osvi.wSuiteMask,osvi.wProductType
    20.     invoke  MessageBox,0,addr buff,0,MB_OK
    21.  
    22.     invoke  ExitProcess,0
    23. Main endp
    24. end Main
    но почему-то wProductType получается 256. Я так понимаю что берется еще значение с wReserved и получается 0100h
    как сюда db "wProductType: %u",0 поместить только 1 байт а не 2 ?
     
  6. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
  7. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    А за ап по рукам?
     
  8. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
    лучше написал бы что-то умное, а твой галимый понт вызывает улыбку.
     
  9. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    integer, я же бот )), а вы - лентяй, батенька!

    Код (Text):
    1.     WF db "dwOSVersionInfoSize: %lu",13,10
    2.     db "dwMajorVersion: %lu",13,10
    3.     db "dwMinorVersion: %lu",13,10
    4.     db "dwBuildNumber: %lu",13,10
    5.     db "dwPlatformId: %lu",13,10
    6.     db "szCSDVersion: %s",13,10
    7.     db "wServicePackMajor: %lu",13,10
    8.     db "wServicePackMinor: %lu",13,10
    9.     db "wSuiteMask: %lu",13,10
    10.     db "wProductType: %lu",0
    Код (Text):
    1.     xor eax, eax
    2.     mov al, osvi.wProductType
    3.     push eax
    4.     mov ax, osvi.wSuiteMask
    5.     push eax
    6.     mov ax, osvi.wServicePackMinor
    7.     push eax
    8.     mov ax, osvi.wServicePackMajor
    9.     push eax
    10.     lea eax, osvi.szCSDVersion
    11.     push eax
    12.     push osvi.dwPlatformId
    13.     push osvi.dwBuildNumber
    14.     push osvi.dwMinorVersion
    15.     push osvi.dwMajorVersion
    16.     push osvi.dwOSVersionInfoSize
    17.     lea eax, WF
    18.     push eax
    19.     lea eax, buff
    20.     push eax
    21.     call wsprintf
     
  10. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
    спасибо большое. теперь понял почему не получалось то, чего я добивался.
    ведь можешь нормально помогать когда трезвый (: ато по рукам, по рукам ... злой ты