Changeset 7577


Ignore:
Timestamp:
Dec 8, 2001, 3:49:17 PM (23 years ago)
Author:
sandervl
Message:

Support for Windows 2000 GetVersionEx extension (OSVERSIONINFOEX structure) added

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/include/win/winbase.h

    r7557 r7577  
    12481248
    12491249DECL_WINELIB_TYPE_AW(OSVERSIONINFO)
     1250
     1251typedef struct _OSVERSIONINFOEXA {
     1252    DWORD dwOSVersionInfoSize;
     1253    DWORD dwMajorVersion;
     1254    DWORD dwMinorVersion;
     1255    DWORD dwBuildNumber;
     1256    DWORD dwPlatformId;
     1257    CHAR  szCSDVersion[128];
     1258    WORD  wServicePackMajor;
     1259    WORD  wServicePackMinor;
     1260    WORD  wReserved[2];
     1261} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
     1262typedef struct _OSVERSIONINFOEXW {
     1263    DWORD dwOSVersionInfoSize;
     1264    DWORD dwMajorVersion;
     1265    DWORD dwMinorVersion;
     1266    DWORD dwBuildNumber;
     1267    DWORD dwPlatformId;
     1268    WCHAR szCSDVersion[128];
     1269    WORD  wServicePackMajor;
     1270    WORD  wServicePackMinor;
     1271    WORD  wReserved[2];
     1272} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
     1273
     1274DECL_WINELIB_TYPE_AW(OSVERSIONINFOEX)
     1275DECL_WINELIB_TYPE_AW(POSVERSIONINFOEX)
     1276DECL_WINELIB_TYPE_AW(LPOSVERSIONINFOEX)
    12501277
    12511278#define VER_PLATFORM_WIN32s             0
  • TabularUnified trunk/src/kernel32/version.cpp

    r7573 r7577  
    1 /* $Id: version.cpp,v 1.5 2001-12-08 12:01:28 sandervl Exp $ */
     1/* $Id: version.cpp,v 1.6 2001-12-08 14:48:54 sandervl Exp $ */
    22
    33/*
     
    4242typedef struct
    4343{
    44     LONG           getVersion16;
    45     LONG           getVersion;
    46     OSVERSIONINFOA getVersionEx;
     44    LONG             getVersion16;
     45    LONG             getVersion;
     46    OSVERSIONINFOEXA getVersionEx;
    4747} VERSION_DATA;
    4848
     
    5555        {
    5656            sizeof(OSVERSIONINFOA), 4, 10, 0x40A07CE,
    57             VER_PLATFORM_WIN32_WINDOWS, "Win98"
     57            VER_PLATFORM_WIN32_WINDOWS, "Win98",
     58            0, 0, 0, 0
    5859        }
    5960    },
     
    6465        {
    6566            sizeof(OSVERSIONINFOA), 4, 90, 0x45A0BB8,
    66             VER_PLATFORM_WIN32_WINDOWS, " "
     67            VER_PLATFORM_WIN32_WINDOWS, " ",
     68            0, 0, 0, 0
    6769        }
    6870    },
     
    7375        {
    7476            sizeof(OSVERSIONINFOA), ODINNT_MAJOR_VERSION, ODINNT_MINOR_VERSION,
    75             ODINNT_BUILD_NR, VER_PLATFORM_WIN32_NT, ODINNT_CSDVERSION
     77            ODINNT_BUILD_NR, VER_PLATFORM_WIN32_NT, ODINNT_CSDVERSION,
     78            6, 0, 0, 0
    7679        }
    7780    },
     
    8285        {
    8386            sizeof(OSVERSIONINFOA), 5, 0, 0x893,
    84             VER_PLATFORM_WIN32_NT, "Service Pack 2"
     87            VER_PLATFORM_WIN32_NT, "Service Pack 2",
     88            2, 0, 0, 0
    8589        }
    8690    },
     
    9195        {
    9296            sizeof(OSVERSIONINFOA), 5, 1, 0xA28,
    93             VER_PLATFORM_WIN32_NT, ""
     97            VER_PLATFORM_WIN32_NT, "",
     98            0, 0, 0, 0
    9499        }
    95100    }
     
    155160        return(FALSE);
    156161   }
    157    if(lpVersionInformation->dwOSVersionInfoSize != sizeof(OSVERSIONINFOA))
     162   if(lpVersionInformation->dwOSVersionInfoSize < sizeof(OSVERSIONINFOA))
    158163   {
    159164        dprintf(("ERROR: buffer too small (%d != %d)", lpVersionInformation->dwOSVersionInfoSize, sizeof(OSVERSIONINFOA)));
     
    171176   strcpy(lpVersionInformation->szCSDVersion, VersionData[winversion].getVersionEx.szCSDVersion );
    172177
     178   if(lpVersionInformation->dwOSVersionInfoSize == sizeof(OSVERSIONINFOEXA))
     179   {//Windows 2000 (and up) extension
     180       LPOSVERSIONINFOEXA lpVersionExInformation = (LPOSVERSIONINFOEXA)lpVersionInformation;
     181
     182       lpVersionExInformation->wServicePackMajor = VersionData[winversion].getVersionEx.wServicePackMajor;
     183       lpVersionExInformation->wServicePackMinor = VersionData[winversion].getVersionEx.wServicePackMinor;
     184       lpVersionExInformation->wReserved[0]      = VersionData[winversion].getVersionEx.wReserved[0];
     185       lpVersionExInformation->wReserved[1]      = VersionData[winversion].getVersionEx.wReserved[1];
     186   }
    173187   SetLastError(ERROR_SUCCESS);
    174188   return(TRUE);
     
    186200        return(FALSE);
    187201   }
    188    if(lpVersionInformation->dwOSVersionInfoSize != sizeof(OSVERSIONINFOW))
     202   if(lpVersionInformation->dwOSVersionInfoSize < sizeof(OSVERSIONINFOW))
    189203   {
    190204        dprintf(("ERROR: buffer too small"));
     
    201215   lpVersionInformation->dwPlatformId   = VersionData[winversion].getVersionEx.dwPlatformId;
    202216   lstrcpyAtoW(lpVersionInformation->szCSDVersion, VersionData[winversion].getVersionEx.szCSDVersion);
     217
     218   if(lpVersionInformation->dwOSVersionInfoSize == sizeof(OSVERSIONINFOEXW))
     219   {//Windows 2000 (and up) extension
     220       LPOSVERSIONINFOEXW lpVersionExInformation = (LPOSVERSIONINFOEXW)lpVersionInformation;
     221
     222       lpVersionExInformation->wServicePackMajor = VersionData[winversion].getVersionEx.wServicePackMajor;
     223       lpVersionExInformation->wServicePackMinor = VersionData[winversion].getVersionEx.wServicePackMinor;
     224       lpVersionExInformation->wReserved[0]      = VersionData[winversion].getVersionEx.wReserved[0];
     225       lpVersionExInformation->wReserved[1]      = VersionData[winversion].getVersionEx.wReserved[1];
     226   }
    203227   SetLastError(ERROR_SUCCESS);
    204228   return(TRUE);
Note: See TracChangeset for help on using the changeset viewer.