VirtualBox

Changeset 47596 in vbox for trunk


Ignore:
Timestamp:
Aug 7, 2013 3:15:09 PM (11 years ago)
Author:
vboxsync
Message:

IPRT: Determin windows version on init and skip the SetDefaultDllDirectories on 32-bit vista. Also corrected RTSystemQueryOSInfo status reporting.

Location:
trunk/src/VBox/Runtime/r3
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/init.h

    r46593 r47596  
    3333DECLHIDDEN(int)  rtR3InitNativeFirst(uint32_t fFlags);
    3434DECLHIDDEN(int)  rtR3InitNativeFinal(uint32_t fFlags);
    35 DECLHIDDEN(void) rtR3InitNativeObtrusive();
    36 
    37 #ifdef RT_OS_WINDOWS
    38 /*
    39  * Windows specific stuff.
    40  */
    41 typedef enum RTR3WINLDRPROT
    42 {
    43     RTR3WINLDRPROT_INVALID = 0,
    44     RTR3WINLDRPROT_NONE,
    45     RTR3WINLDRPROT_NO_CWD,
    46     RTR3WINLDRPROT_SAFE
    47 } RTR3WINLDRPROT;
    48 
    49 extern DECLHIDDEN(RTR3WINLDRPROT)  g_enmWinLdrProt;
    50 # ifdef _WINDEF_
    51 extern DECLHIDDEN(HMODULE)         g_hModKernel32;
    52 extern DECLHIDDEN(HMODULE)         g_hModNtDll;
    53 # endif
    54 
    55 #endif /* RT_OS_WINDOWS */
     35DECLHIDDEN(void) rtR3InitNativeObtrusive(void);
    5636
    5737#endif
  • trunk/src/VBox/Runtime/r3/win/RTSystemQueryOSInfo-win.cpp

    r47011 r47596  
    2828*   Header Files                                                               *
    2929*******************************************************************************/
     30#include "internal/iprt.h"
    3031#include <Windows.h>
    3132#include <WinUser.h>
    3233
     34#include "internal-r3-win.h"
    3335#include <iprt/system.h>
    3436#include <iprt/assert.h>
     
    4042*   Structures and Typedefs                                                    *
    4143*******************************************************************************/
    42 /**
    43  * Windows OS type as determined by rtSystemWinOSType().
    44  */
    45 typedef enum RTWINOSTYPE
    46 {
    47     kRTWinOSType_UNKNOWN    = 0,
    48     kRTWinOSType_9XFIRST    = 1,
    49     kRTWinOSType_95         = kRTWinOSType_9XFIRST,
    50     kRTWinOSType_95SP1,
    51     kRTWinOSType_95OSR2,
    52     kRTWinOSType_98,
    53     kRTWinOSType_98SP1,
    54     kRTWinOSType_98SE,
    55     kRTWinOSType_ME,
    56     kRTWinOSType_9XLAST     = 99,
    57     kRTWinOSType_NTFIRST    = 100,
    58     kRTWinOSType_NT31       = kRTWinOSType_NTFIRST,
    59     kRTWinOSType_NT351,
    60     kRTWinOSType_NT4,
    61     kRTWinOSType_2K,
    62     kRTWinOSType_XP,
    63     kRTWinOSType_2003,
    64     kRTWinOSType_VISTA,
    65     kRTWinOSType_2008,
    66     kRTWinOSType_7,
    67     kRTWinOSType_8,
    68     kRTWinOSType_81,
    69     kRTWinOSType_NT_UNKNOWN = 199,
    70     kRTWinOSType_NT_LAST    = kRTWinOSType_UNKNOWN
    71 } RTWINOSTYPE;
    7244
    7345/**
     
    11385
    11486/**
    115  * Translates OSVERSIONINOFEX into a Windows OS type.
    116  *
    117  * @returns The Windows OS type.
    118  * @param   pOSInfoEx       The OS info returned by Windows.
    119  *
    120  * @remarks This table has been assembled from Usenet postings, personal
    121  *          observations, and reading other people's code.  Please feel
    122  *          free to add to it or correct it.
    123  * <pre>
    124          dwPlatFormID  dwMajorVersion  dwMinorVersion  dwBuildNumber
    125 95             1              4               0             950
    126 95 SP1         1              4               0        >950 && <=1080
    127 95 OSR2        1              4             <10           >1080
    128 98             1              4              10            1998
    129 98 SP1         1              4              10       >1998 && <2183
    130 98 SE          1              4              10          >=2183
    131 ME             1              4              90            3000
    132 
    133 NT 3.51        2              3              51            1057
    134 NT 4           2              4               0            1381
    135 2000           2              5               0            2195
    136 XP             2              5               1            2600
    137 2003           2              5               2            3790
    138 Vista          2              6               0
    139 
    140 CE 1.0         3              1               0
    141 CE 2.0         3              2               0
    142 CE 2.1         3              2               1
    143 CE 3.0         3              3               0
    144 </pre>
    145  */
    146 static RTWINOSTYPE rtSystemWinOSType(OSVERSIONINFOEX const *pOSInfoEx)
    147 {
    148     RTWINOSTYPE enmVer         = kRTWinOSType_UNKNOWN;
    149     BYTE  const bProductType   = pOSInfoEx->wProductType;
    150     DWORD const dwPlatformId   = pOSInfoEx->dwPlatformId;
    151     DWORD const dwMinorVersion = pOSInfoEx->dwMinorVersion;
    152     DWORD const dwMajorVersion = pOSInfoEx->dwMajorVersion;
    153     DWORD const dwBuildNumber  = pOSInfoEx->dwBuildNumber & 0xFFFF;   /* Win 9x needs this. */
    154 
    155     if (    dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
    156         &&  dwMajorVersion == 4)
    157     {
    158         if (        dwMinorVersion < 10
    159                  && dwBuildNumber == 950)
    160             enmVer = kRTWinOSType_95;
    161         else if (   dwMinorVersion < 10
    162                  && dwBuildNumber > 950
    163                  && dwBuildNumber <= 1080)
    164             enmVer = kRTWinOSType_95SP1;
    165         else if (   dwMinorVersion < 10
    166                  && dwBuildNumber > 1080)
    167             enmVer = kRTWinOSType_95OSR2;
    168         else if (   dwMinorVersion == 10
    169                  && dwBuildNumber == 1998)
    170             enmVer = kRTWinOSType_98;
    171         else if (   dwMinorVersion == 10
    172                  && dwBuildNumber > 1998
    173                  && dwBuildNumber < 2183)
    174             enmVer = kRTWinOSType_98SP1;
    175         else if (   dwMinorVersion == 10
    176                  && dwBuildNumber >= 2183)
    177             enmVer = kRTWinOSType_98SE;
    178         else if (dwMinorVersion == 90)
    179             enmVer = kRTWinOSType_ME;
    180     }
    181     else if (dwPlatformId == VER_PLATFORM_WIN32_NT)
    182     {
    183         if (        dwMajorVersion == 3
    184                  && dwMinorVersion == 51)
    185             enmVer = kRTWinOSType_NT351;
    186         else if (   dwMajorVersion == 4
    187                  && dwMinorVersion == 0)
    188             enmVer = kRTWinOSType_NT4;
    189         else if (   dwMajorVersion == 5
    190                  && dwMinorVersion == 0)
    191             enmVer = kRTWinOSType_2K;
    192         else if (   dwMajorVersion == 5
    193                  && dwMinorVersion == 1)
    194             enmVer = kRTWinOSType_XP;
    195         else if (   dwMajorVersion == 5
    196                  && dwMinorVersion == 2)
    197             enmVer = kRTWinOSType_2003;
    198         else if (   dwMajorVersion == 6
    199                  && dwMinorVersion == 0)
    200         {
    201             if (bProductType != VER_NT_WORKSTATION)
    202                 enmVer = kRTWinOSType_2008;
    203             else
    204                 enmVer = kRTWinOSType_VISTA;
    205         }
    206         else if (   dwMajorVersion == 6
    207                  && dwMinorVersion == 1)
    208             enmVer = kRTWinOSType_7;
    209         else if (   dwMajorVersion == 6
    210                  && dwMinorVersion == 2)
    211             enmVer = kRTWinOSType_8;
    212         else if (   dwMajorVersion == 6
    213                  && dwMinorVersion == 3)
    214             enmVer = kRTWinOSType_81;
    215         else
    216             enmVer = kRTWinOSType_NT_UNKNOWN;
    217     }
    218 
    219     return enmVer;
    220 }
    221 
    222 
    223 /**
    22487 * Wrapper around the GetProductInfo API.
    22588 *
     
    296159static int rtSystemWinQueryOSVersion(RTSYSOSINFO enmInfo, char *pszInfo, size_t cchInfo)
    297160{
    298     int rc;
    299 
    300161    /*
    301162     * Make sure it's terminated correctly in case of error.
     
    304165
    305166    /*
    306      * Query the Windows version.
    307      *
    308      * ASSUMES OSVERSIONINFOEX starts with the exact same layout as OSVERSIONINFO (safe).
    309      */
    310     OSVERSIONINFOEX OSInfoEx;
    311     RT_ZERO(OSInfoEx);
    312     OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    313     if (!GetVersionEx((LPOSVERSIONINFO) &OSInfoEx))
    314     {
    315         DWORD err = GetLastError();
    316         rc = RTErrConvertFromWin32(err);
    317         AssertMsgFailedReturn(("err=%d\n", err), rc == VERR_BUFFER_OVERFLOW ? VERR_INTERNAL_ERROR : rc);
    318     }
    319 
    320     /* Get extended version info for 2000 and later. */
    321     if (   OSInfoEx.dwPlatformId == VER_PLATFORM_WIN32_NT
    322         && OSInfoEx.dwMajorVersion >= 5)
    323     {
    324         RT_ZERO(OSInfoEx);
    325         OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    326         if (!GetVersionEx((LPOSVERSIONINFO) &OSInfoEx))
    327         {
    328             DWORD err = GetLastError();
    329             rc = RTErrConvertFromWin32(err);
    330             AssertMsgFailedReturn(("err=%d\n", err), rc == VERR_BUFFER_OVERFLOW ? VERR_INTERNAL_ERROR : rc);
    331         }
    332     }
     167     * Check that we got the windows version at init time.
     168     */
     169    AssertReturn(g_WinOsInfoEx.dwOSVersionInfoSize, VERR_WRONG_ORDER);
    333170
    334171    /*
     
    337174    char szTmp[512];
    338175    szTmp[0] = '\0';
    339     rc = VINF_SUCCESS;
    340176    switch (enmInfo)
    341177    {
     
    345181        case RTSYSOSINFO_PRODUCT:
    346182        {
    347             RTWINOSTYPE enmVer = rtSystemWinOSType(&OSInfoEx);
    348             switch (enmVer)
     183            switch (g_enmWinVer)
    349184            {
    350185                case kRTWinOSType_95:           strcpy(szTmp, "Windows 95"); break;
     
    360195                case kRTWinOSType_XP:
    361196                    strcpy(szTmp, "Windows XP");
    362                     if (OSInfoEx.wSuiteMask & VER_SUITE_PERSONAL)
     197                    if (g_WinOsInfoEx.wSuiteMask & VER_SUITE_PERSONAL)
    363198                        strcat(szTmp, " Home");
    364                     if (    OSInfoEx.wProductType == VER_NT_WORKSTATION
    365                         && !(OSInfoEx.wSuiteMask & VER_SUITE_PERSONAL))
     199                    if (    g_WinOsInfoEx.wProductType == VER_NT_WORKSTATION
     200                        && !(g_WinOsInfoEx.wSuiteMask & VER_SUITE_PERSONAL))
    366201                        strcat(szTmp, " Professional");
    367202#if 0 /** @todo fixme */
     
    384219
    385220                case kRTWinOSType_NT_UNKNOWN:
    386                     RTStrPrintf(szTmp, sizeof(szTmp), "Unknown NT v%u.%u", OSInfoEx.dwMajorVersion, OSInfoEx.dwMinorVersion);
     221                    RTStrPrintf(szTmp, sizeof(szTmp), "Unknown NT v%u.%u",
     222                                g_WinOsInfoEx.dwMajorVersion, g_WinOsInfoEx.dwMinorVersion);
    387223                    break;
    388224
     
    390226                    AssertFailed();
    391227                case kRTWinOSType_UNKNOWN:
    392                     RTStrPrintf(szTmp, sizeof(szTmp), "Unknown %d v%u.%u", OSInfoEx.dwPlatformId, OSInfoEx.dwMajorVersion, OSInfoEx.dwMinorVersion);
     228                    RTStrPrintf(szTmp, sizeof(szTmp), "Unknown %d v%u.%u",
     229                                g_WinOsInfoEx.dwPlatformId, g_WinOsInfoEx.dwMajorVersion, g_WinOsInfoEx.dwMinorVersion);
    393230                    break;
    394231            }
     
    401238        case RTSYSOSINFO_RELEASE:
    402239        {
    403             RTWINOSTYPE enmVer = rtSystemWinOSType(&OSInfoEx);
    404             RTStrPrintf(szTmp, sizeof(szTmp), "%u.%u.%u", OSInfoEx.dwMajorVersion, OSInfoEx.dwMinorVersion, OSInfoEx.dwBuildNumber);
     240            RTStrPrintf(szTmp, sizeof(szTmp), "%u.%u.%u",
     241                        g_WinOsInfoEx.dwMajorVersion, g_WinOsInfoEx.dwMinorVersion, g_WinOsInfoEx.dwBuildNumber);
    405242            break;
    406243        }
     
    412249        case RTSYSOSINFO_SERVICE_PACK:
    413250        {
    414             if (OSInfoEx.wServicePackMajor)
     251            if (g_WinOsInfoEx.wServicePackMajor)
    415252            {
    416                 if (OSInfoEx.wServicePackMinor)
    417                     RTStrPrintf(szTmp, sizeof(szTmp), "%u.%u", (unsigned)OSInfoEx.wServicePackMajor, (unsigned)OSInfoEx.wServicePackMinor);
     253                if (g_WinOsInfoEx.wServicePackMinor)
     254                    RTStrPrintf(szTmp, sizeof(szTmp), "%u.%u",
     255                                (unsigned)g_WinOsInfoEx.wServicePackMajor, (unsigned)g_WinOsInfoEx.wServicePackMinor);
    418256                else
    419                     RTStrPrintf(szTmp, sizeof(szTmp), "%u", (unsigned)OSInfoEx.wServicePackMajor);
     257                    RTStrPrintf(szTmp, sizeof(szTmp), "%u",
     258                                (unsigned)g_WinOsInfoEx.wServicePackMajor);
    420259            }
    421             else if (OSInfoEx.szCSDVersion[0])
     260            else if (g_WinOsInfoEx.szCSDVersion[0])
    422261            {
    423262                /* just copy the entire string. */
    424                 memcpy(szTmp, OSInfoEx.szCSDVersion, sizeof(OSInfoEx.szCSDVersion));
    425                 szTmp[sizeof(OSInfoEx.szCSDVersion)] = '\0';
    426                 AssertCompile(sizeof(szTmp) > sizeof(OSInfoEx.szCSDVersion));
     263                memcpy(szTmp, g_WinOsInfoEx.szCSDVersion, sizeof(g_WinOsInfoEx.szCSDVersion));
     264                szTmp[sizeof(g_WinOsInfoEx.szCSDVersion)] = '\0';
     265                AssertCompile(sizeof(szTmp) > sizeof(g_WinOsInfoEx.szCSDVersion));
    427266            }
    428267            else
    429268            {
    430                 RTWINOSTYPE enmVer = rtSystemWinOSType(&OSInfoEx);
    431                 switch (enmVer)
     269                switch (g_enmWinVer)
    432270                {
    433271                    case kRTWinOSType_95SP1:    strcpy(szTmp, "1"); break;
     
    450288    Assert(cchTmp < sizeof(szTmp));
    451289    if (cchTmp < cchInfo)
     290    {
    452291        memcpy(pszInfo, szTmp, cchTmp + 1);
    453     else
    454     {
    455         memcpy(pszInfo, szTmp, cchInfo - 1);
    456         pszInfo[cchInfo - 1] = '\0';
    457         if (RT_SUCCESS(rc))
    458             rc = VERR_BUFFER_OVERFLOW;
    459     }
    460     return VINF_SUCCESS;
     292        return VINF_SUCCESS;
     293    }
     294    memcpy(pszInfo, szTmp, cchInfo - 1);
     295    pszInfo[cchInfo - 1] = '\0';
     296    return VERR_BUFFER_OVERFLOW;
    461297}
    462298
  • trunk/src/VBox/Runtime/r3/win/init-win.cpp

    r46593 r47596  
    3636#endif
    3737
    38 #include "internal/iprt.h"
     38#include "internal-r3-win.h"
    3939#include <iprt/initterm.h>
     40#include <iprt/assert.h>
    4041#include <iprt/err.h>
     42#include <iprt/string.h>
    4143#include "../init.h"
    4244
     
    4547*   Global Variables                                                           *
    4648*******************************************************************************/
     49/** Windows DLL loader protection level. */
     50DECLHIDDEN(RTR3WINLDRPROT)  g_enmWinLdrProt = RTR3WINLDRPROT_NONE;
     51/** Our simplified windows version.    */
     52DECLHIDDEN(RTWINOSTYPE)     g_enmWinVer = kRTWinOSType_UNKNOWN;
     53/** Extended windows version information. */
     54DECLHIDDEN(OSVERSIONINFOEX) g_WinOsInfoEx;
    4755/** The native kernel32.dll handle. */
    4856DECLHIDDEN(HMODULE)         g_hModKernel32 = NULL;
    4957/** The native ntdll.dll handle. */
    5058DECLHIDDEN(HMODULE)         g_hModNtDll = NULL;
    51 /** Windows DLL loader protection level. */
    52 DECLHIDDEN(RTR3WINLDRPROT)  g_enmWinLdrProt = RTR3WINLDRPROT_NONE;
     59
     60
     61
     62/**
     63 * Translates OSVERSIONINOFEX into a Windows OS type.
     64 *
     65 * @returns The Windows OS type.
     66 * @param   pOSInfoEx       The OS info returned by Windows.
     67 *
     68 * @remarks This table has been assembled from Usenet postings, personal
     69 *          observations, and reading other people's code.  Please feel
     70 *          free to add to it or correct it.
     71 * <pre>
     72         dwPlatFormID  dwMajorVersion  dwMinorVersion  dwBuildNumber
     7395             1              4               0             950
     7495 SP1         1              4               0        >950 && <=1080
     7595 OSR2        1              4             <10           >1080
     7698             1              4              10            1998
     7798 SP1         1              4              10       >1998 && <2183
     7898 SE          1              4              10          >=2183
     79ME             1              4              90            3000
     80
     81NT 3.51        2              3              51            1057
     82NT 4           2              4               0            1381
     832000           2              5               0            2195
     84XP             2              5               1            2600
     852003           2              5               2            3790
     86Vista          2              6               0
     87
     88CE 1.0         3              1               0
     89CE 2.0         3              2               0
     90CE 2.1         3              2               1
     91CE 3.0         3              3               0
     92</pre>
     93 */
     94static RTWINOSTYPE rtR3InitWinSimplifiedVersion(OSVERSIONINFOEX const *pOSInfoEx)
     95{
     96    RTWINOSTYPE enmVer         = kRTWinOSType_UNKNOWN;
     97    BYTE  const bProductType   = pOSInfoEx->wProductType;
     98    DWORD const dwPlatformId   = pOSInfoEx->dwPlatformId;
     99    DWORD const dwMinorVersion = pOSInfoEx->dwMinorVersion;
     100    DWORD const dwMajorVersion = pOSInfoEx->dwMajorVersion;
     101    DWORD const dwBuildNumber  = pOSInfoEx->dwBuildNumber & 0xFFFF;   /* Win 9x needs this. */
     102
     103    if (    dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
     104        &&  dwMajorVersion == 4)
     105    {
     106        if (        dwMinorVersion < 10
     107                 && dwBuildNumber == 950)
     108            enmVer = kRTWinOSType_95;
     109        else if (   dwMinorVersion < 10
     110                 && dwBuildNumber > 950
     111                 && dwBuildNumber <= 1080)
     112            enmVer = kRTWinOSType_95SP1;
     113        else if (   dwMinorVersion < 10
     114                 && dwBuildNumber > 1080)
     115            enmVer = kRTWinOSType_95OSR2;
     116        else if (   dwMinorVersion == 10
     117                 && dwBuildNumber == 1998)
     118            enmVer = kRTWinOSType_98;
     119        else if (   dwMinorVersion == 10
     120                 && dwBuildNumber > 1998
     121                 && dwBuildNumber < 2183)
     122            enmVer = kRTWinOSType_98SP1;
     123        else if (   dwMinorVersion == 10
     124                 && dwBuildNumber >= 2183)
     125            enmVer = kRTWinOSType_98SE;
     126        else if (dwMinorVersion == 90)
     127            enmVer = kRTWinOSType_ME;
     128    }
     129    else if (dwPlatformId == VER_PLATFORM_WIN32_NT)
     130    {
     131        if (        dwMajorVersion == 3
     132                 && dwMinorVersion == 51)
     133            enmVer = kRTWinOSType_NT351;
     134        else if (   dwMajorVersion == 4
     135                 && dwMinorVersion == 0)
     136            enmVer = kRTWinOSType_NT4;
     137        else if (   dwMajorVersion == 5
     138                 && dwMinorVersion == 0)
     139            enmVer = kRTWinOSType_2K;
     140        else if (   dwMajorVersion == 5
     141                 && dwMinorVersion == 1)
     142            enmVer = kRTWinOSType_XP;
     143        else if (   dwMajorVersion == 5
     144                 && dwMinorVersion == 2)
     145            enmVer = kRTWinOSType_2003;
     146        else if (   dwMajorVersion == 6
     147                 && dwMinorVersion == 0)
     148        {
     149            if (bProductType != VER_NT_WORKSTATION)
     150                enmVer = kRTWinOSType_2008;
     151            else
     152                enmVer = kRTWinOSType_VISTA;
     153        }
     154        else if (   dwMajorVersion == 6
     155                 && dwMinorVersion == 1)
     156            enmVer = kRTWinOSType_7;
     157        else if (   dwMajorVersion == 6
     158                 && dwMinorVersion == 2)
     159            enmVer = kRTWinOSType_8;
     160        else if (   dwMajorVersion == 6
     161                 && dwMinorVersion == 3)
     162            enmVer = kRTWinOSType_81;
     163        else
     164            enmVer = kRTWinOSType_NT_UNKNOWN;
     165    }
     166
     167    return enmVer;
     168}
    53169
    54170
     
    60176    UINT fOldErrMode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
    61177    SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX | fOldErrMode);
     178
     179    /*
     180     * Query the Windows version.
     181     * ASSUMES OSVERSIONINFOEX starts with the exact same layout as OSVERSIONINFO (safe).
     182     */
     183    AssertCompileMembersSameSizeAndOffset(OSVERSIONINFOEX, szCSDVersion, OSVERSIONINFO, szCSDVersion);
     184    AssertCompileMemberOffset(OSVERSIONINFOEX, wServicePackMajor, sizeof(OSVERSIONINFO));
     185    RT_ZERO(g_WinOsInfoEx);
     186    g_WinOsInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
     187    if (!GetVersionExA((POSVERSIONINFOA)&g_WinOsInfoEx))
     188    {
     189        /* Fallback, just get the basic info. */
     190        RT_ZERO(g_WinOsInfoEx);
     191        g_WinOsInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
     192        if (GetVersionExA((POSVERSIONINFOA)&g_WinOsInfoEx))
     193            Assert(g_WinOsInfoEx.dwPlatformId != VER_PLATFORM_WIN32_NT || g_WinOsInfoEx.dwMajorVersion < 5);
     194        else
     195        {
     196            AssertBreakpoint();
     197            RT_ZERO(g_WinOsInfoEx);
     198        }
     199    }
     200    if (g_WinOsInfoEx.dwOSVersionInfoSize)
     201        g_enmWinVer = rtR3InitWinSimplifiedVersion(&g_WinOsInfoEx);
    62202
    63203    /*
     
    81221    }
    82222
    83     typedef BOOL (WINAPI *PFNSETDEFAULTDLLDIRECTORIES)(DWORD);
    84     PFNSETDEFAULTDLLDIRECTORIES pfnSetDefDllDirs;
    85     pfnSetDefDllDirs = (PFNSETDEFAULTDLLDIRECTORIES)GetProcAddress(g_hModKernel32, "SetDefaultDllDirectories");
    86     if (pfnSetDefDllDirs)
    87     {
    88         if (pfnSetDefDllDirs(LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32))
    89             g_enmWinLdrProt = RTR3WINLDRPROT_SAFE;
    90         else if (RT_SUCCESS(rc))
    91             rc = VERR_INTERNAL_ERROR_4;
     223#if ARCH_BITS == 32
     224    if (g_enmWinVer > kRTWinOSType_VISTA) /* Observed GUI issues on 32-bit Vista. */
     225#endif
     226    {
     227        typedef BOOL(WINAPI *PFNSETDEFAULTDLLDIRECTORIES)(DWORD);
     228        PFNSETDEFAULTDLLDIRECTORIES pfnSetDefDllDirs;
     229        pfnSetDefDllDirs = (PFNSETDEFAULTDLLDIRECTORIES)GetProcAddress(g_hModKernel32, "SetDefaultDllDirectories");
     230        if (pfnSetDefDllDirs)
     231        {
     232            if (pfnSetDefDllDirs(LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32))
     233                g_enmWinLdrProt = RTR3WINLDRPROT_SAFE;
     234            else if (RT_SUCCESS(rc))
     235                rc = VERR_INTERNAL_ERROR_4;
     236        }
    92237    }
    93238
  • trunk/src/VBox/Runtime/r3/win/process-win.cpp

    r46593 r47596  
    4141
    4242#include <iprt/process.h>
    43 #include "internal/iprt.h"
     43#include "internal-r3-win.h"
    4444
    4545#include <iprt/assert.h>
     
    5959#include <iprt/socket.h>
    6060
    61 #include "../init.h"
    6261
    6362
  • trunk/src/VBox/Runtime/r3/win/symlink-win.cpp

    r46593 r47596  
    3030*******************************************************************************/
    3131#define LOG_GROUP RTLOGGROUP_SYMLINK
     32#include <Windows.h>
    3233
    3334#include <iprt/symlink.h>
     35#include "internal-r3-win.h"
    3436
    3537#include <iprt/assert.h>
     
    4143#include "internal/path.h"
    4244
    43 #include <Windows.h>
    44 #include "../init.h"
    4545
    4646
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette