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

Discussion in 'WASM.BEGINNERS' started by integer, Jan 29, 2009.

  1. integer

    integer New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2007
    Messages:
    62
    Code (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

    Blog Posts:
    0
    Joined:
    Oct 28, 2008
    Messages:
    41
    Попробуй так:

    Code (Text):
    1. .data?
    2. osvi OSVERSIONINFOEX <?>
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Blog Posts:
    0
    Joined:
    Sep 11, 2006
    Messages:
    1,426
    похоже что просто в определении структуры нет этих полей, покажи как структура у тя описана
     
  4. Coderess

    Coderess New Member

    Blog Posts:
    0
    Joined:
    Oct 28, 2008
    Messages:
    41
    Да, действительно:

    Code (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

    Blog Posts:
    0
    Joined:
    Jan 2, 2007
    Messages:
    62
    дополнил структуру
    Code (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
    дописал код
    Code (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

    Blog Posts:
    0
    Joined:
    Jan 2, 2007
    Messages:
    62
  7. litrovith

    litrovith Member

    Blog Posts:
    0
    Joined:
    Jun 20, 2007
    Messages:
    509
    А за ап по рукам?
     
  8. integer

    integer New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2007
    Messages:
    62
    лучше написал бы что-то умное, а твой галимый понт вызывает улыбку.
     
  9. litrovith

    litrovith Member

    Blog Posts:
    0
    Joined:
    Jun 20, 2007
    Messages:
    509
    integer, я же бот )), а вы - лентяй, батенька!

    Code (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
    Code (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

    Blog Posts:
    0
    Joined:
    Jan 2, 2007
    Messages:
    62
    спасибо большое. теперь понял почему не получалось то, чего я добивался.
    ведь можешь нормально помогать когда трезвый (: ато по рукам, по рукам ... злой ты