VirtualBox

Changeset 46593 in vbox for trunk/src/VBox/Additions/WINNT


Ignore:
Timestamp:
Jun 17, 2013 2:32:51 PM (12 years ago)
Author:
vboxsync
Message:

updates

Location:
trunk/src/VBox/Additions/WINNT
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp

    r44529 r46593  
    18001800            vboxVDbgVEHandlerRegister();
    18011801#endif
    1802             int rc = RTR3InitDll(0);
     1802            int rc = RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
    18031803            AssertRC(rc);
    18041804            if (RT_SUCCESS(rc))
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3DIf.cpp

    r44529 r46593  
    2828}
    2929
     30/**
     31 * Loads a system DLL.
     32 *
     33 * @returns Module handle or NULL
     34 * @param   pszName             The DLL name.
     35 */
     36static HMODULE loadSystemDll(const char *pszName)
     37{
     38    char   szPath[MAX_PATH];
     39    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     40    size_t cbName  = strlen(pszName) + 1;
     41    if (cchPath + 1 + cbName > sizeof(szPath))
     42    {
     43        SetLastError(ERROR_FILENAME_EXCED_RANGE);
     44        return NULL;
     45    }
     46    szPath[cchPath] = '\\';
     47    memcpy(&szPath[cchPath + 1], pszName, cbName);
     48    return LoadLibraryA(szPath);
     49}
    3050
    3151HRESULT VBoxDispD3DOpen(VBOXDISPD3D *pD3D)
    3252{
    3353#ifdef VBOX_WDDM_WOW64
    34     pD3D->hD3DLib = LoadLibraryW(L"VBoxD3D9wddm-x86.dll");
     54    pD3D->hD3DLib = loadSystemDll("VBoxD3D9wddm-x86.dll");
    3555#else
    36     pD3D->hD3DLib = LoadLibraryW(L"VBoxD3D9wddm.dll");
     56    pD3D->hD3DLib = loadSystemDll("VBoxD3D9wddm.dll");
    3757#endif
    3858    if (!pD3D->hD3DLib)
    3959    {
    4060        DWORD winErr = GetLastError();
    41         WARN((__FUNCTION__": LoadLibraryW failed, winErr = (%d)", winErr));
     61        WARN((__FUNCTION__": LoadLibrary failed, winErr = (%d)", winErr));
    4262        return E_FAIL;
    4363    }
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispKmt.cpp

    r46172 r46593  
    2323#endif
    2424
     25/**
     26 * Loads a system DLL.
     27 *
     28 * @returns Module handle or NULL
     29 * @param   pszName             The DLL name.
     30 */
     31static HMODULE loadSystemDll(const char *pszName)
     32{
     33    char   szPath[MAX_PATH];
     34    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     35    size_t cbName  = strlen(pszName) + 1;
     36    if (cchPath + 1 + cbName > sizeof(szPath))
     37        return NULL;
     38    szPath[cchPath] = '\\';
     39    memcpy(&szPath[cchPath + 1], pszName, cbName);
     40    return LoadLibraryA(szPath);
     41}
     42
    2543HRESULT vboxDispKmtCallbacksInit(PVBOXDISPKMT_CALLBACKS pCallbacks)
    2644{
     
    2947    memset(pCallbacks, 0, sizeof (*pCallbacks));
    3048
    31     pCallbacks->hGdi32 = LoadLibraryW(L"gdi32.dll");
     49    pCallbacks->hGdi32 = loadSystemDll("gdi32.dll");
    3250    if (pCallbacks->hGdi32 != NULL)
    3351    {
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxScreen.cpp

    r44529 r46593  
    11/* $Id$ */
    2 
    32/** @file
    43 * VBoxVideo Display D3D User mode dll
     
    65
    76/*
    8  * Copyright (C) 2011-2012 Oracle Corporation
     7 * Copyright (C) 2011-2013 Oracle Corporation
    98 *
    109 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    341340}
    342341
     342/**
     343 * Loads a system DLL.
     344 *
     345 * @returns Module handle or NULL
     346 * @param   pszName             The DLL name.
     347 */
     348static HMODULE loadSystemDll(const char *pszName)
     349{
     350    char   szPath[MAX_PATH];
     351    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     352    size_t cbName  = strlen(pszName) + 1;
     353    if (cchPath + 1 + cbName > sizeof(szPath))
     354        return NULL;
     355    szPath[cchPath] = '\\';
     356    memcpy(&szPath[cchPath + 1], pszName, cbName);
     357    return LoadLibraryA(szPath);
     358}
     359
    343360//HRESULT vboxScreenMonInit(PVBOXSCREENMON pMon)
    344361HRESULT vboxScreenMonInit()
     
    351368    pMon->LoData.ScreenLayout.EscapeHdr.escapeCode = VBOXESC_SCREENLAYOUT;
    352369
    353     pMon->hGdi32 = LoadLibraryW(L"gdi32.dll");
     370    pMon->hGdi32 = loadSystemDll("gdi32.dll");
    354371    if (pMon->hGdi32 != NULL)
    355372    {
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/switcher/sw_common.c

    r44529 r46593  
    11/* $Id$ */
    2 
    32/** @file
    43 * VBox D3D8/9 dll switcher
     
    65
    76/*
    8  * Copyright (C) 2009-2012 Oracle Corporation
     7 * Copyright (C) 2009-2013 Oracle Corporation
    98 *
    109 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2322static char* gsBlackListDll[] = {"awt.dll", "wpfgfx_v0400.dll", "wpfgfx_v0300.dll", NULL};
    2423
     24/**
     25 * Loads a system DLL.
     26 *
     27 * @returns Module handle or NULL
     28 * @param   pszName             The DLL name.
     29 */
     30static HMODULE loadSystemDll(const char *pszName)
     31{
     32    char   szPath[MAX_PATH];
     33    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     34    size_t cbName  = strlen(pszName) + 1;
     35    if (cchPath + 1 + cbName > sizeof(szPath))
     36        return NULL;
     37    szPath[cchPath] = '\\';
     38    memcpy(&szPath[cchPath + 1], pszName, cbName);
     39    return LoadLibraryA(szPath);
     40}
     41
    2542/* Checks if 3D is enabled for VM and it works on host machine */
    2643BOOL isVBox3DEnabled(void)
     
    3148
    3249#ifdef VBOX_WDDM_WOW64
    33     hDLL = LoadLibrary("VBoxOGL-x86.dll");
     50    hDLL = loadSystemDll("VBoxOGL-x86.dll");
    3451#else
    35     hDLL = LoadLibrary("VBoxOGL.dll");
     52    hDLL = loadSystemDll("VBoxOGL.dll");
    3653#endif
    3754
     
    6683    int i;
    6784
    68         if (!GetModuleFileName(NULL, name, 1000))
    69                 return TRUE;
     85    if (!GetModuleFileName(NULL, name, 1000))
     86        return TRUE;
    7087
    7188    /*Extract filename*/
     
    108125
    109126    if (isVBox3DEnabled() && checkOptions())
    110     {
    111127        dllName = vboxName;
    112     } else
    113     {
     128    else
    114129        dllName = msName;
    115     }
    116130
    117     hDLL = LoadLibrary(dllName);
     131    hDLL = loadSystemDll(dllName);
    118132    FillD3DExports(hDLL);
    119133}
     134
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/directx.c

    r42499 r46593  
    53085308}
    53095309
     5310/**
     5311 * Loads a system DLL.
     5312 *
     5313 * @returns Module handle or NULL
     5314 * @param   pszName             The DLL name.
     5315 */
     5316static HMODULE loadSystemDll(const char *pszName)
     5317{
     5318    char   szPath[MAX_PATH];
     5319    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     5320    size_t cbName  = strlen(pszName) + 1;
     5321    if (cchPath + 1 + cbName > sizeof(szPath))
     5322        return NULL;
     5323    szPath[cchPath] = '\\';
     5324    memcpy(&szPath[cchPath + 1], pszName, cbName);
     5325    return LoadLibraryA(szPath);
     5326}
     5327
    53105328static BOOL InitAdapters(IWineD3DImpl *This)
    53115329{
     
    53235341    if(!mod_gl) {
    53245342#ifdef USE_WIN32_OPENGL
    5325 #define USE_GL_FUNC(pfn) pfn = (void*)GetProcAddress(mod_gl, #pfn);
    5326 #if defined(VBOX_WITH_WDDM) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
     5343# define USE_GL_FUNC(pfn) pfn = (void*)GetProcAddress(mod_gl, #pfn);
     5344# if defined(VBOX_WITH_WDDM) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
    53275345        BOOL (APIENTRY *pDrvValidateVersion)(DWORD) DECLSPEC_HIDDEN;
    5328 #ifdef VBOX_WDDM_WOW64
    5329         mod_gl = LoadLibraryA("VBoxOGL-x86.dll");
    5330 #else
    5331         mod_gl = LoadLibraryA("VBoxOGL.dll");
    5332 #endif
    5333 #else
    5334         mod_gl = LoadLibraryA("opengl32.dll");
    5335 #endif
     5346#  ifdef VBOX_WDDM_WOW64
     5347        mod_gl = loadSystemDll("VBoxOGL-x86.dll");
     5348#  else
     5349        mod_gl = loadSystemDll("VBoxOGL.dll");
     5350#  endif
     5351# else
     5352        mod_gl = loadSystemDll("opengl32.dll");
     5353# endif
    53365354        if(!mod_gl) {
    53375355            ERR("Can't load opengl32.dll!\n");
    53385356            goto nogl_adapter;
    53395357        }
    5340 #if defined(VBOX_WITH_WDDM) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
     5358# if defined(VBOX_WITH_WDDM) || defined(VBOX_WINE_WITH_SINGLE_SWAPCHAIN_CONTEXT)
    53415359        /* init properly */
    53425360        pDrvValidateVersion = (void*)GetProcAddress(mod_gl, "DrvValidateVersion");
     
    53495367            goto nogl_adapter;
    53505368        }
    5351 #endif
     5369# endif
    53525370#else
    5353 #define USE_GL_FUNC(pfn) pfn = (void*)pwglGetProcAddress(#pfn);
     5371# define USE_GL_FUNC(pfn) pfn = (void*)pwglGetProcAddress(#pfn);
    53545372        /* To bypass the opengl32 thunks load wglGetProcAddress from gdi32 (glXGetProcAddress wrapper) instead of opengl32's */
    53555373        mod_gl = GetModuleHandleA("gdi32.dll");
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine_new/switcher/sw_common.c

    r46521 r46593  
    11/* $Id$ */
    2 
    32/** @file
    43 * VBox D3D8/9 dll switcher
     
    65
    76/*
    8  * Copyright (C) 2009 Oracle Corporation
     7 * Copyright (C) 2009-2013 Oracle Corporation
    98 *
    109 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2322static char* gsBlackListDll[] = {"awt.dll", "wpfgfx_v0400.dll", "wpfgfx_v0300.dll", NULL};
    2423
     24/**
     25 * Loads a system DLL.
     26 *
     27 * @returns Module handle or NULL
     28 * @param   pszName             The DLL name.
     29 */
     30static HMODULE loadSystemDll(const char *pszName)
     31{
     32    char   szPath[MAX_PATH];
     33    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     34    size_t cbName  = strlen(pszName) + 1;
     35    if (cchPath + 1 + cbName > sizeof(szPath))
     36        return NULL;
     37    szPath[cchPath] = '\\';
     38    memcpy(&szPath[cchPath + 1], pszName, cbName);
     39    return LoadLibraryA(szPath);
     40}
     41
    2542/* Checks if 3D is enabled for VM and it works on host machine */
    2643BOOL isVBox3DEnabled(void)
     
    3148
    3249#ifdef VBOX_WDDM_WOW64
    33     hDLL = LoadLibrary("VBoxOGL-x86.dll");
     50    hDLL = loadSystemDll("VBoxOGL-x86.dll");
    3451#else
    35     hDLL = LoadLibrary("VBoxOGL.dll");
     52    hDLL = loadSystemDll("VBoxOGL.dll");
    3653#endif
    3754
     
    108125
    109126    if (isVBox3DEnabled() && checkOptions())
    110     {
    111127        dllName = vboxName;
    112     } else
    113     {
     128    else
    114129        dllName = msName;
    115     }
    116130
    117     hDLL = LoadLibrary(dllName);
     131    hDLL = loadSystemDll(dllName);
    118132    FillD3DExports(hDLL);
    119133}
     134
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine_new/wined3d/directx.c

    r46521 r46593  
    51215121}
    51225122
     5123/**
     5124 * Loads a system DLL.
     5125 *
     5126 * @returns Module handle or NULL
     5127 * @param   pszName             The DLL name.
     5128 */
     5129static HMODULE loadSystemDll(const char *pszName)
     5130{
     5131    char   szPath[MAX_PATH];
     5132    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     5133    size_t cbName  = strlen(pszName) + 1;
     5134    if (cchPath + 1 + cbName > sizeof(szPath))
     5135        return NULL;
     5136    szPath[cchPath] = '\\';
     5137    memcpy(&szPath[cchPath + 1], pszName, cbName);
     5138    return LoadLibraryA(szPath);
     5139}
     5140
    51235141/* Do not call while under the GL lock. */
    51245142static BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, UINT ordinal)
     
    51425160#ifdef USE_WIN32_OPENGL
    51435161    {
    5144 #ifndef VBOX
     5162# ifndef VBOX
    51455163        HMODULE mod_gl = GetModuleHandleA("opengl32.dll");
    5146 #else
     5164# else
    51475165        BOOL (APIENTRY *pDrvValidateVersion)(DWORD) DECLSPEC_HIDDEN;
    5148 # ifdef VBOX_WDDM_WOW64
    5149         HMODULE mod_gl = LoadLibraryA("VBoxOGL-x86.dll");
    5150 # else
    5151         HMODULE mod_gl = LoadLibraryA("VBoxOGL.dll");
    5152 # endif
     5166#  ifdef VBOX_WDDM_WOW64
     5167        HMODULE mod_gl = loadSystemDll("VBoxOGL-x86.dll");
     5168#  else
     5169        HMODULE mod_gl = loadSystemDll("VBoxOGL.dll");
     5170#  endif
    51535171        if (!mod_gl)
    51545172        {
     
    51695187        }
    51705188
    5171 # define VBOX_USE_FUNC(f) p##f = (void *)GetProcAddress(mod_gl, #f);
     5189#  define VBOX_USE_FUNC(f) p##f = (void *)GetProcAddress(mod_gl, #f);
    51725190        VBOX_GL_FUNCS_GEN
    5173 # undef VBOX_USE_FUNC
    5174 #endif
    5175 #define USE_GL_FUNC(f) gl_info->gl_ops.gl.p_##f = (void *)GetProcAddress(mod_gl, #f);
     5191#  undef VBOX_USE_FUNC
     5192# endif
     5193# define USE_GL_FUNC(f) gl_info->gl_ops.gl.p_##f = (void *)GetProcAddress(mod_gl, #f);
    51765194        ALL_WGL_FUNCS
    5177 #undef USE_GL_FUNC
     5195# undef USE_GL_FUNC
    51785196        gl_info->gl_ops.wgl.p_wglSwapBuffers = (void *)GetProcAddress(mod_gl, "wglSwapBuffers");
    51795197    }
  • trunk/src/VBox/Additions/WINNT/Installer/InstallHelper/VBoxGuestInstallHelper.cpp

    r44529 r46593  
    197197
    198198/**
     199 * Loads a system DLL.
     200 *
     201 * @returns Module handle or NULL
     202 * @param   pszName             The DLL name.
     203 */
     204static HMODULE loadSystemDll(const char *pszName)
     205{
     206    char   szPath[MAX_PATH];
     207    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     208    size_t cbName  = strlen(pszName) + 1;
     209    if (cchPath + 1 + cbName > sizeof(szPath))
     210        return NULL;
     211    szPath[cchPath] = '\\';
     212    memcpy(&szPath[cchPath + 1], pszName, cbName);
     213    return LoadLibraryA(szPath);
     214}
     215
     216/**
    199217 * Disables the Windows File Protection for a specified file
    200218 * using an undocumented SFC API call. Don't try this at home!
     
    214232    if (SUCCEEDED(hr))
    215233    {
    216         HMODULE hSFC = LoadLibrary("sfc_os.dll");
     234        HMODULE hSFC = loadSystemDll("sfc_os.dll");
    217235        if (NULL != hSFC)
    218236        {
  • trunk/src/VBox/Additions/WINNT/Installer/VBoxDrvInst.cpp

    r45938 r46593  
    130130     if (pCallbackContext)
    131131         fwprintf((FILE*)pCallbackContext, _T("(%u) %u - %s\n"), Event, dwError, pEventDescription);
     132}
     133
     134/**
     135 * Loads a system DLL.
     136 *
     137 * @returns Module handle or NULL
     138 * @param   pszName             The DLL name.
     139 */
     140static HMODULE loadSystemDll(const char *pszName)
     141{
     142    char   szPath[MAX_PATH];
     143    UINT   cchPath = GetSystemDirectoryA(szPath, sizeof(szPath));
     144    size_t cbName  = strlen(pszName) + 1;
     145    if (cchPath + 1 + cbName > sizeof(szPath))
     146        return NULL;
     147    szPath[cchPath] = '\\';
     148    memcpy(&szPath[cchPath + 1], pszName, cbName);
     149    return LoadLibraryA(szPath);
    132150}
    133151
     
    146164{
    147165    HRESULT hr = S_OK;
    148     HMODULE hDIFxAPI = LoadLibrary(_T("DIFxAPI.dll"));
     166    HMODULE hDIFxAPI = loadSystemDll("DIFxAPI.dll");
    149167    if (NULL == hDIFxAPI)
    150168    {
  • trunk/src/VBox/Additions/WINNT/SharedFolders/np/vboxmrxnp.cpp

    r40295 r46593  
    15981598    {
    15991599        case DLL_PROCESS_ATTACH:
    1600             RTR3InitDll(0);
     1600            RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
    16011601            VbglR3Init();
    16021602            LogRel(("VBOXNP: DLL loaded.\n"));
  • trunk/src/VBox/Additions/WINNT/VBoxCredProv/VBoxCredentialProvider.cpp

    r46382 r46593  
    363363        case DLL_PROCESS_ATTACH:
    364364        {
    365             int rc = RTR3InitDll(0 /* Flags */);
     365            int rc = RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
    366366            if (RT_SUCCESS(rc))
    367367                rc = VbglR3Init();
  • trunk/src/VBox/Additions/WINNT/VBoxGINA/VBoxGINA.cpp

    r40768 r46593  
    2020#include <iprt/buildconfig.h>
    2121#include <iprt/initterm.h>
     22#include <iprt/ldr.h>
    2223
    2324#include <VBox/VBoxGuestLib.h>
     
    8384        case DLL_PROCESS_ATTACH:
    8485        {
    85             RTR3InitDll(0 /* Flags */);
     86            RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
    8687            VbglR3Init();
    8788
     
    115116                         DWORD *pdwDllVersion)
    116117{
    117     HINSTANCE hDll;
    118 
    119118    VBoxGINAVerbose(0, "VBoxGINA::WlxNegotiate: dwWinlogonVersion: %ld\n", dwWinlogonVersion);
    120119
    121120    /* Load the standard Microsoft GINA DLL. */
    122     if (!(hDll = LoadLibrary(TEXT("MSGINA.DLL"))))
    123     {
    124         VBoxGINAVerbose(0, "VBoxGINA::WlxNegotiate: failed loading MSGINA! Last error=%ld\n", GetLastError());
     121    RTLDRMOD hLdrMod;
     122    int rc = RTLdrLoadSystem("MSGINA.DLL", true /*fNoUnload*/, &hLdrMod);
     123    if (RT_FAILURE(rc))
     124    {
     125        VBoxGINAVerbose(0, "VBoxGINA::WlxNegotiate: failed loading MSGINA! rc=%Rrc\n", rc);
    125126        return FALSE;
    126127    }
     
    129130     * Now get the entry points of the MSGINA
    130131     */
    131     GWlxNegotiate = (PGWLXNEGOTIATE)GetProcAddress(hDll, "WlxNegotiate");
     132    GWlxNegotiate = (PGWLXNEGOTIATE)RTLdrGetFunction(hLdrMod, "WlxNegotiate");
    132133    if (!GWlxNegotiate)
    133134    {
     
    135136        return FALSE;
    136137    }
    137     GWlxInitialize = (PGWLXINITIALIZE)GetProcAddress(hDll, "WlxInitialize");
     138    GWlxInitialize = (PGWLXINITIALIZE)RTLdrGetFunction(hLdrMod, "WlxInitialize");
    138139    if (!GWlxInitialize)
    139140    {
     
    142143    }
    143144    GWlxDisplaySASNotice =
    144         (PGWLXDISPLAYSASNOTICE)GetProcAddress(hDll, "WlxDisplaySASNotice");
     145        (PGWLXDISPLAYSASNOTICE)RTLdrGetFunction(hLdrMod, "WlxDisplaySASNotice");
    145146    if (!GWlxDisplaySASNotice)
    146147    {
     
    149150    }
    150151    GWlxLoggedOutSAS =
    151         (PGWLXLOGGEDOUTSAS)GetProcAddress(hDll, "WlxLoggedOutSAS");
     152        (PGWLXLOGGEDOUTSAS)RTLdrGetFunction(hLdrMod, "WlxLoggedOutSAS");
    152153    if (!GWlxLoggedOutSAS)
    153154    {
     
    156157    }
    157158    GWlxActivateUserShell =
    158         (PGWLXACTIVATEUSERSHELL)GetProcAddress(hDll, "WlxActivateUserShell");
     159        (PGWLXACTIVATEUSERSHELL)RTLdrGetFunction(hLdrMod, "WlxActivateUserShell");
    159160    if (!GWlxActivateUserShell)
    160161    {
     
    163164    }
    164165    GWlxLoggedOnSAS =
    165         (PGWLXLOGGEDONSAS)GetProcAddress(hDll, "WlxLoggedOnSAS");
     166        (PGWLXLOGGEDONSAS)RTLdrGetFunction(hLdrMod, "WlxLoggedOnSAS");
    166167    if (!GWlxLoggedOnSAS)
    167168    {
     
    170171    }
    171172    GWlxDisplayLockedNotice =
    172         (PGWLXDISPLAYLOCKEDNOTICE)GetProcAddress(hDll, "WlxDisplayLockedNotice");
     173        (PGWLXDISPLAYLOCKEDNOTICE)RTLdrGetFunction(hLdrMod, "WlxDisplayLockedNotice");
    173174    if (!GWlxDisplayLockedNotice)
    174175    {
     
    176177        return FALSE;
    177178    }
    178     GWlxIsLockOk = (PGWLXISLOCKOK)GetProcAddress(hDll, "WlxIsLockOk");
     179    GWlxIsLockOk = (PGWLXISLOCKOK)RTLdrGetFunction(hLdrMod, "WlxIsLockOk");
    179180    if (!GWlxIsLockOk)
    180181    {
     
    183184    }
    184185    GWlxWkstaLockedSAS =
    185         (PGWLXWKSTALOCKEDSAS)GetProcAddress(hDll, "WlxWkstaLockedSAS");
     186        (PGWLXWKSTALOCKEDSAS)RTLdrGetFunction(hLdrMod, "WlxWkstaLockedSAS");
    186187    if (!GWlxWkstaLockedSAS)
    187188    {
     
    189190        return FALSE;
    190191    }
    191     GWlxIsLogoffOk = (PGWLXISLOGOFFOK)GetProcAddress(hDll, "WlxIsLogoffOk");
     192    GWlxIsLogoffOk = (PGWLXISLOGOFFOK)RTLdrGetFunction(hLdrMod, "WlxIsLogoffOk");
    192193    if (!GWlxIsLogoffOk)
    193194    {
     
    195196        return FALSE;
    196197    }
    197     GWlxLogoff = (PGWLXLOGOFF)GetProcAddress(hDll, "WlxLogoff");
     198    GWlxLogoff = (PGWLXLOGOFF)RTLdrGetFunction(hLdrMod, "WlxLogoff");
    198199    if (!GWlxLogoff)
    199200    {
     
    201202        return FALSE;
    202203    }
    203     GWlxShutdown = (PGWLXSHUTDOWN)GetProcAddress(hDll, "WlxShutdown");
     204    GWlxShutdown = (PGWLXSHUTDOWN)RTLdrGetFunction(hLdrMod, "WlxShutdown");
    204205    if (!GWlxShutdown)
    205206    {
     
    208209    }
    209210    /* GINA 1.1, optional */
    210     GWlxStartApplication = (PGWLXSTARTAPPLICATION)GetProcAddress(hDll, "WlxStartApplication");
    211     GWlxScreenSaverNotify = (PGWLXSCREENSAVERNOTIFY)GetProcAddress(hDll, "WlxScreenSaverNotify");
     211    GWlxStartApplication = (PGWLXSTARTAPPLICATION)RTLdrGetFunction(hLdrMod, "WlxStartApplication");
     212    GWlxScreenSaverNotify = (PGWLXSCREENSAVERNOTIFY)RTLdrGetFunction(hLdrMod, "WlxScreenSaverNotify");
    212213    /* GINA 1.3, optional */
    213     GWlxNetworkProviderLoad = (PGWLXNETWORKPROVIDERLOAD)GetProcAddress( hDll, "WlxNetworkProviderLoad");
    214     GWlxDisplayStatusMessage = (PGWLXDISPLAYSTATUSMESSAGE)GetProcAddress( hDll, "WlxDisplayStatusMessage");
    215     GWlxGetStatusMessage = (PGWLXGETSTATUSMESSAGE)GetProcAddress( hDll, "WlxGetStatusMessage");
    216     GWlxRemoveStatusMessage = (PGWLXREMOVESTATUSMESSAGE)GetProcAddress( hDll, "WlxRemoveStatusMessage");
     214    GWlxNetworkProviderLoad = (PGWLXNETWORKPROVIDERLOAD)RTLdrGetFunction(hLdrMod, "WlxNetworkProviderLoad");
     215    GWlxDisplayStatusMessage = (PGWLXDISPLAYSTATUSMESSAGE)RTLdrGetFunction(hLdrMod, "WlxDisplayStatusMessage");
     216    GWlxGetStatusMessage = (PGWLXGETSTATUSMESSAGE)RTLdrGetFunction(hLdrMod, "WlxGetStatusMessage");
     217    GWlxRemoveStatusMessage = (PGWLXREMOVESTATUSMESSAGE)RTLdrGetFunction(hLdrMod, "WlxRemoveStatusMessage");
    217218    /* GINA 1.4, optional */
    218219    GWlxGetConsoleSwitchCredentials =
    219         (PGWLXGETCONSOLESWITCHCREDENTIALS)GetProcAddress(hDll, "WlxGetConsoleSwitchCredentials");
    220     GWlxReconnectNotify = (PGWLXRECONNECTNOTIFY)GetProcAddress(hDll, "WlxReconnectNotify");
    221     GWlxDisconnectNotify = (PGWLXDISCONNECTNOTIFY)GetProcAddress(hDll, "WlxDisconnectNotify");
     220        (PGWLXGETCONSOLESWITCHCREDENTIALS)RTLdrGetFunction(hLdrMod, "WlxGetConsoleSwitchCredentials");
     221    GWlxReconnectNotify = (PGWLXRECONNECTNOTIFY)RTLdrGetFunction(hLdrMod, "WlxReconnectNotify");
     222    GWlxDisconnectNotify = (PGWLXDISCONNECTNOTIFY)RTLdrGetFunction(hLdrMod, "WlxDisconnectNotify");
    222223    VBoxGINAVerbose(0, "VBoxGINA::WlxNegotiate: optional function pointers:\n"
    223224                    "  WlxStartApplication: %p\n"
  • trunk/src/VBox/Additions/WINNT/VBoxMMR/dllmain.cpp

    r44864 r46593  
    4545            if (isWMP)
    4646            {
    47                 RTR3InitDll(0);
     47                RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE);
    4848                VbglR3Init();
    4949                VBoxMMRHookLog("VBoxMMR: Hooking wmplayer process\n");
  • trunk/src/VBox/Additions/WINNT/VBoxMMR/tsmfhook.cpp

    r44864 r46593  
    13431343}
    13441344
    1345 void InstallHooksForModule(const char *pszName, HookEntry hooks[])
    1346 {
    1347     HMODULE hMod = LoadLibraryA(pszName);
    1348     if (hMod != NULL)
    1349     {
    1350         VBoxMMRHookLog("VBoxMMR: Hooking %s -> %x \n", pszName, hMod);
    1351         const IMAGE_IMPORT_DESCRIPTOR *pDescriptor = GetImportDescriptor(hMod);
    1352         InstallHooks(pDescriptor, (PBYTE) hMod, hooks);
     1345void InstallHooksForSystemModule(const char *pszName, HookEntry hooks[])
     1346{
     1347    /* Construct the full path to the given module and load it. */
     1348    char   szPath[MAX_PATH];
     1349    UINT   cchPath = GetSystemDirectoryA(szPath, MAX_PATH);
     1350    size_t cbName  = strlen(pszName) + 1;
     1351    if (cchPath + 1 + cbName <= sizeof(szPath))
     1352    {
     1353        szPath[cchPath] = '\\';
     1354        memcpy(&szPath[cchPath + 1], pszName, cbName);
     1355
     1356        HMODULE hMod = LoadLibraryA(szPath);
     1357        if (hMod != NULL)
     1358        {
     1359            VBoxMMRHookLog("VBoxMMR: Hooking %s -> %x \n", pszName, hMod);
     1360            const IMAGE_IMPORT_DESCRIPTOR *pDescriptor = GetImportDescriptor(hMod);
     1361            InstallHooks(pDescriptor, (PBYTE) hMod, hooks);
     1362        }
     1363        else
     1364            VBoxMMRHookLog("VBoxMMR: Error hooking %s -> not found (last error %u)\n", pszName, GetLastError());
    13531365    }
    13541366    else
    1355     {
    13561367        VBoxMMRHookLog("VBoxMMR: Error hooking %s -> not found\n", pszName);
    1357     }
    13581368}
    13591369
     
    13821392        }
    13831393
    1384         InstallHooksForModule("winmm.dll", g_WinMMHooks);
    1385         InstallHooksForModule("tsmf.dll", g_TSMFHooks);
    1386         InstallHooksForModule("DSHOWRDPFILTER.dll", g_TSMFHooks);
    1387         InstallHooksForModule("MSMPEG2VDEC.dll", g_DShowHooks);
    1388         InstallHooksForModule("MFDS.dll", g_DShowHooks);
    1389         InstallHooksForModule("mf.dll", g_MFHooks);
     1394        InstallHooksForSystemModule("winmm.dll", g_WinMMHooks);
     1395        InstallHooksForSystemModule("tsmf.dll", g_TSMFHooks);
     1396        InstallHooksForSystemModule("DSHOWRDPFILTER.dll", g_TSMFHooks);
     1397        InstallHooksForSystemModule("MSMPEG2VDEC.dll", g_DShowHooks);
     1398        InstallHooksForSystemModule("MFDS.dll", g_DShowHooks);
     1399        InstallHooksForSystemModule("mf.dll", g_MFHooks);
    13901400
    13911401        ULONG ret = RegisterTraceGuids(
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxLA.cpp

    r43584 r46593  
    2727#include <iprt/alloc.h>
    2828#include <iprt/list.h>
     29#include <iprt/ldr.h>
    2930
    3031#define LALOG(a) do { if (gCtx.fLogEnabled) LogRel(a); } while(0)
     
    8788        char *pszPropWaitPattern; /* Which properties are monitored. */
    8889    } activeClient;
    89 
    90     HMODULE hModuleKernel32;
    9190
    9291    BOOL (WINAPI * pfnProcessIdToSessionId)(DWORD dwProcessId, DWORD *pSessionId);
     
    12501249    RT_ZERO(gCtx.activeClient);
    12511250
    1252     gCtx.hModuleKernel32 = LoadLibrary("KERNEL32");
    1253 
    1254     if (gCtx.hModuleKernel32)
    1255     {
    1256         *(uintptr_t *)&gCtx.pfnProcessIdToSessionId = (uintptr_t)GetProcAddress(gCtx.hModuleKernel32, "ProcessIdToSessionId");
    1257     }
    1258     else
    1259     {
    1260         gCtx.pfnProcessIdToSessionId = NULL;
    1261     }
     1251    *(void **)&gCtx.pfnProcessIdToSessionId = RTLdrGetSystemSymbol("KERNEL32", "ProcessIdToSessionId");
    12621252    *pfStartThread = true;
    12631253    *ppInstance = &gCtx;
     
    12801270    ActionExecutorDeleteActions(&pCtx->listDetachActions);
    12811271
    1282     if (pCtx->hModuleKernel32)
    1283     {
    1284         FreeLibrary(pCtx->hModuleKernel32);
    1285         pCtx->pfnProcessIdToSessionId = NULL;
    1286     }
    1287     pCtx->hModuleKernel32 = NULL;
     1272    pCtx->pfnProcessIdToSessionId = NULL;
    12881273}
    12891274
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxMMR.cpp

    r42295 r46593  
    1818#include "VBoxTray.h"
    1919#include "VBoxMMR.h"
     20#include <iprt/ldr.h>
    2021
    2122struct VBOXMMRCONTEXT
    2223{
    23     HINSTANCE hMod;
     24    RTLDRMOD  hModHook;
    2425    HHOOK     hHook;
    2526};
     
    3233void VBoxMMRCleanup(VBOXMMRCONTEXT *pCtx)
    3334{
    34     if (NULL != pCtx->hHook)
     35    if (pCtx->hHook)
    3536    {
    3637        UnhookWindowsHookEx(pCtx->hHook);
     38        pCtx->hHook = NULL;
    3739    }
    3840
    39     if (pCtx->hMod)
     41    if (pCtx->hModHook != NIL_RTLDRMOD)
    4042    {
    41         FreeLibrary(pCtx->hMod);
     43        RTLdrClose(pCtx->hModHook);
     44        pCtx->hModHook = NIL_RTLDRMOD;
    4245    }
    43 
    44     return;
    4546}
    4647
     
    5051    bool *pfStartThread)
    5152{
    52     HOOKPROC pHook = NULL;
    53 
    5453    LogRel2(("VBoxMMR: Initializing\n"));
    5554
    56     gCtx.hMod = LoadLibraryA(g_pszMMRDLL);
    57     if (NULL == gCtx.hMod)
     55    int rc = RTLdrLoadAppPriv(g_pszMMRDLL, &gCtx.hModHook);
     56    if (RT_SUCCESS(rc))
    5857    {
    59         LogRel2(("VBoxMMR: Hooking library not found\n"));
    60         VBoxMMRCleanup(&gCtx);
    61         return VERR_NOT_FOUND;
     58        HOOKPROC pHook = (HOOKPROC)RTLdrGetFunction(gCtx.hModHook, g_pszMMRPROC);
     59        if (pHook)
     60        {
     61            HMODULE hMod = (HMODULE)RTLdrGetNativeHandle(gCtx.hModHook);
     62            Assert(hMod != (HMODULE)~(uintptr_t)0);
     63            gCtx.hHook = SetWindowsHookEx(WH_CBT, pHook, hMod, 0);
     64            if (gCtx.hHook)
     65            {
     66                *ppInstance = &gCtx;
     67                return VINF_SUCCESS;
     68            }
     69
     70            rc = RTErrConvertFromWin32(GetLastError());
     71            LogRel2(("VBoxMMR: Error installing hooking proc: %Rrc\n", rc));
     72        }
     73        else
     74        {
     75            LogRel2(("VBoxMMR: Hooking proc not found\n"));
     76            rc = VERR_NOT_FOUND;
     77        }
    6278    }
     79    else
     80        LogRel2(("VBoxMMR: Hooking library not found (%Rrc)\n", rc));
    6381
    64     pHook = (HOOKPROC) GetProcAddress(gCtx.hMod, g_pszMMRPROC);
    65     if (NULL == pHook)
    66     {
    67         LogRel2(("VBoxMMR: Hooking proc not found\n"));
    68         VBoxMMRCleanup(&gCtx);
    69         return VERR_NOT_FOUND;
    70     }
    71 
    72     gCtx.hHook = SetWindowsHookEx(WH_CBT, pHook, gCtx.hMod, 0);
    73     if (NULL == gCtx.hHook)
    74     {
    75         int rc = RTErrConvertFromWin32(GetLastError());
    76         LogRel2(("VBoxMMR: Error installing hooking proc: %d\n", rc));
    77         VBoxMMRCleanup(&gCtx);
    78         return rc;
    79     }
    80 
    81     *ppInstance = &gCtx;
    82 
    83     return VINF_SUCCESS;
     82    RTLdrClose(gCtx.hModHook);
     83    gCtx.hModHook = NIL_RTLDRMOD;
     84    return rc;
    8485}
    8586
     
    9596    return 0;
    9697}
     98
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxSeamless.cpp

    r45760 r46593  
    2525#include <VBox/VMMDev.h>
    2626#include <iprt/assert.h>
     27#include <iprt/ldr.h>
    2728#include <VBoxGuestInternal.h>
    2829
     
    3132    const VBOXSERVICEENV *pEnv;
    3233
    33     HMODULE    hModule;
     34    RTLDRMOD hModHook;
    3435
    3536    BOOL    (* pfnVBoxHookInstallWindowTracker)(HMODULE hDll);
     
    5556    *pfStartThread = false;
    5657    gCtx.pEnv = pEnv;
     58    gCtx.hModHook = NIL_RTLDRMOD;
    5759
    5860    OSVERSIONINFO OSinfo;
     
    7274    {
    7375        /* Will fail if SetWinEventHook is not present (version < NT4 SP6 apparently) */
    74         gCtx.hModule = LoadLibrary(VBOXHOOK_DLL_NAME);
    75         if (gCtx.hModule)
    76         {
    77             *(uintptr_t *)&gCtx.pfnVBoxHookInstallWindowTracker = (uintptr_t)GetProcAddress(gCtx.hModule, "VBoxHookInstallWindowTracker");
    78             *(uintptr_t *)&gCtx.pfnVBoxHookRemoveWindowTracker  = (uintptr_t)GetProcAddress(gCtx.hModule, "VBoxHookRemoveWindowTracker");
     76        rc = RTLdrLoadAppPriv(VBOXHOOK_DLL_NAME, &gCtx.hModHook);
     77        if (RT_SUCCESS(rc))
     78        {
     79            *(PFNRT *)&gCtx.pfnVBoxHookInstallWindowTracker = RTLdrGetFunction(gCtx.hModHook, "VBoxHookInstallWindowTracker");
     80            *(PFNRT *)&gCtx.pfnVBoxHookRemoveWindowTracker  = RTLdrGetFunction(gCtx.hModHook, "VBoxHookRemoveWindowTracker");
    7981
    8082            /* rc should contain success status */
     
    9092        }
    9193        else
    92         {
    93             rc = RTErrConvertFromWin32(GetLastError());
    9494            Log(("VBoxTray: VBoxSeamlessInit: LoadLibrary of \"%s\" failed with rc=%Rrc\n", VBOXHOOK_DLL_NAME, rc));
    95         }
    9695    }
    9796
     
    109108    if (gCtx.pfnVBoxHookRemoveWindowTracker)
    110109        gCtx.pfnVBoxHookRemoveWindowTracker();
    111     if (gCtx.hModule)
    112         FreeLibrary(gCtx.hModule);
    113     gCtx.hModule = 0;
     110    if (gCtx.hModHook != NIL_RTLDRMOD)
     111    {
     112        RTLdrClose(gCtx.hModHook);
     113        gCtx.hModHook = NIL_RTLDRMOD;
     114    }
    114115    return;
    115116}
     
    122123        VBoxSeamlessCheckWindows();
    123124
    124         gCtx.pfnVBoxHookInstallWindowTracker(gCtx.hModule);
     125        HMODULE hMod = (HMODULE)RTLdrGetNativeHandle(gCtx.hModHook);
     126        Assert(hMod != (HMODULE)~(uintptr_t)0);
     127        gCtx.pfnVBoxHookInstallWindowTracker(hMod);
    125128    }
    126129}
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxTray.cpp

    r46428 r46593  
    4141
    4242#include <iprt/buildconfig.h>
     43#include <iprt/ldr.h>
    4344
    4445/* Default desktop state tracking */
     
    6364 * of the window passed to vboxStInit */
    6465static int vboxStInit(HWND hWnd);
    65 static void vboxStTerm();
     66static void vboxStTerm(void);
    6667/* @returns true on "IsActiveConsole" state change */
    6768static BOOL vboxStHandleEvent(WPARAM EventID, LPARAM SessionID);
     
    549550        {
    550551            BOOL (WINAPI * pfnConvertStringSecurityDescriptorToSecurityDescriptorA)(LPCSTR StringSecurityDescriptor, DWORD StringSDRevision, PSECURITY_DESCRIPTOR  *SecurityDescriptor, PULONG  SecurityDescriptorSize);
    551 
    552             HMODULE hModule = LoadLibrary("ADVAPI32.DLL");
    553             if (!hModule)
    554             {
    555                 dwErr = GetLastError();
    556                 Log(("VBoxTray: Loading module ADVAPI32.DLL failed with last error = %08X\n", dwErr));
    557             }
    558             else
     552            *(void **)&pfnConvertStringSecurityDescriptorToSecurityDescriptorA =
     553                RTLdrGetSystemSymbol("ADVAPI32.DLL", "ConvertStringSecurityDescriptorToSecurityDescriptorA");
     554            Log(("VBoxTray: pfnConvertStringSecurityDescriptorToSecurityDescriptorA = %x\n", pfnConvertStringSecurityDescriptorToSecurityDescriptorA));
     555            if (pfnConvertStringSecurityDescriptorToSecurityDescriptorA)
    559556            {
    560557                PSECURITY_DESCRIPTOR    pSD;
     
    563560                BOOL                    fSaclDefaulted = FALSE;
    564561
    565                 *(uintptr_t *)&pfnConvertStringSecurityDescriptorToSecurityDescriptorA = (uintptr_t)GetProcAddress(hModule, "ConvertStringSecurityDescriptorToSecurityDescriptorA");
    566 
    567                 Log(("VBoxTray: pfnConvertStringSecurityDescriptorToSecurityDescriptorA = %x\n", pfnConvertStringSecurityDescriptorToSecurityDescriptorA));
    568                 if (pfnConvertStringSecurityDescriptorToSecurityDescriptorA)
     562                fRC = pfnConvertStringSecurityDescriptorToSecurityDescriptorA("S:(ML;;NW;;;LW)", /* this means "low integrity" */
     563                                                                              SDDL_REVISION_1, &pSD, NULL);
     564                if (!fRC)
    569565                {
    570                     fRC = pfnConvertStringSecurityDescriptorToSecurityDescriptorA("S:(ML;;NW;;;LW)", /* this means "low integrity" */
    571                                                                                   SDDL_REVISION_1, &pSD, NULL);
     566                    dwErr = GetLastError();
     567                    Log(("VBoxTray: ConvertStringSecurityDescriptorToSecurityDescriptorA failed with last error = %08X\n", dwErr));
     568                }
     569                else
     570                {
     571                    fRC = GetSecurityDescriptorSacl(pSD, &fSaclPresent, &pSacl, &fSaclDefaulted);
    572572                    if (!fRC)
    573573                    {
    574574                        dwErr = GetLastError();
    575                         Log(("VBoxTray: ConvertStringSecurityDescriptorToSecurityDescriptorA failed with last error = %08X\n", dwErr));
     575                        Log(("VBoxTray: GetSecurityDescriptorSacl failed with last error = %08X\n", dwErr));
    576576                    }
    577577                    else
    578578                    {
    579                         fRC = GetSecurityDescriptorSacl(pSD, &fSaclPresent, &pSacl, &fSaclDefaulted);
     579                        fRC = SetSecurityDescriptorSacl(SecAttr.lpSecurityDescriptor, TRUE, pSacl, FALSE);
    580580                        if (!fRC)
    581581                        {
    582582                            dwErr = GetLastError();
    583                             Log(("VBoxTray: GetSecurityDescriptorSacl failed with last error = %08X\n", dwErr));
    584                         }
    585                         else
    586                         {
    587                             fRC = SetSecurityDescriptorSacl(SecAttr.lpSecurityDescriptor, TRUE, pSacl, FALSE);
    588                             if (!fRC)
    589                             {
    590                                 dwErr = GetLastError();
    591                                 Log(("VBoxTray: SetSecurityDescriptorSacl failed with last error = %08X\n", dwErr));
    592                             }
     583                            Log(("VBoxTray: SetSecurityDescriptorSacl failed with last error = %08X\n", dwErr));
    593584                        }
    594585                    }
     
    10151006{
    10161007    HWND hWTSAPIWnd;
    1017     HMODULE hWTSAPI32;
     1008    RTLDRMOD hLdrModWTSAPI32;
    10181009    BOOL fIsConsole;
    10191010    WTS_CONNECTSTATE_CLASS enmConnectState;
     
    10321023    USHORT *pProtocolType = NULL;
    10331024    DWORD cbBuf = 0;
    1034     if (gVBoxSt.pfnWTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSConnectState, (LPTSTR *)&penmConnectState, &cbBuf))
    1035     {
    1036         if (gVBoxSt.pfnWTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientProtocolType, (LPTSTR *)&pProtocolType, &cbBuf))
     1025    if (gVBoxSt.pfnWTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSConnectState,
     1026                                               (LPTSTR *)&penmConnectState, &cbBuf))
     1027    {
     1028        if (gVBoxSt.pfnWTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientProtocolType,
     1029                                                   (LPTSTR *)&pProtocolType, &cbBuf))
    10371030        {
    10381031            gVBoxSt.fIsConsole = (*pProtocolType == 0);
     
    10401033            return VINF_SUCCESS;
    10411034        }
    1042         else
    1043         {
    1044             DWORD dwErr = GetLastError();
    1045             WARN(("VBoxTray: WTSQuerySessionInformationA WTSClientProtocolType failed, error = %08X\n", dwErr));
    1046             rc = RTErrConvertFromWin32(dwErr);
    1047         }
     1035
     1036        DWORD dwErr = GetLastError();
     1037        WARN(("VBoxTray: WTSQuerySessionInformationA WTSClientProtocolType failed, error = %08X\n", dwErr));
     1038        rc = RTErrConvertFromWin32(dwErr);
    10481039    }
    10491040    else
     
    10631054static int vboxStInit(HWND hWnd)
    10641055{
    1065     int rc = VINF_SUCCESS;
    1066     memset(&gVBoxSt, 0, sizeof (gVBoxSt));
    1067     gVBoxSt.hWTSAPI32 = LoadLibrary("WTSAPI32.DLL");
    1068     if (gVBoxSt.hWTSAPI32)
    1069     {
    1070         *(uintptr_t *)&gVBoxSt.pfnWTSRegisterSessionNotification = (uintptr_t)GetProcAddress(gVBoxSt.hWTSAPI32, "WTSRegisterSessionNotification");
    1071         if (!gVBoxSt.pfnWTSRegisterSessionNotification)
    1072         {
     1056    RT_ZERO(gVBoxSt);
     1057    int rc = RTLdrLoadSystem("WTSAPI32.DLL", false /*fNoUnload*/, &gVBoxSt.hLdrModWTSAPI32);
     1058    if (RT_SUCCESS(rc))
     1059    {
     1060        rc = RTLdrGetSymbol(gVBoxSt.hLdrModWTSAPI32, "WTSRegisterSessionNotification",
     1061                            (void **)&gVBoxSt.pfnWTSRegisterSessionNotification);
     1062        if (RT_SUCCESS(rc))
     1063        {
     1064            rc = RTLdrGetSymbol(gVBoxSt.hLdrModWTSAPI32, "WTSUnRegisterSessionNotification",
     1065                                (void **)&gVBoxSt.pfnWTSUnRegisterSessionNotification);
     1066            if (RT_SUCCESS(rc))
     1067            {
     1068                rc = RTLdrGetSymbol(gVBoxSt.hLdrModWTSAPI32, "WTSQuerySessionInformationA",
     1069                                    (void **)&gVBoxSt.pfnWTSQuerySessionInformationA);
     1070                if (RT_FAILURE(rc))
     1071                    WARN(("VBoxTray: WTSQuerySessionInformationA not found\n"));
     1072            }
     1073            else
     1074                WARN(("VBoxTray: WTSUnRegisterSessionNotification not found\n"));
     1075        }
     1076        else
    10731077            WARN(("VBoxTray: WTSRegisterSessionNotification not found\n"));
    1074             rc = VERR_NOT_SUPPORTED;
    1075         }
    1076 
    1077         *(uintptr_t *)&gVBoxSt.pfnWTSUnRegisterSessionNotification = (uintptr_t)GetProcAddress(gVBoxSt.hWTSAPI32, "WTSUnRegisterSessionNotification");
    1078         if (!gVBoxSt.pfnWTSUnRegisterSessionNotification)
    1079         {
    1080             WARN(("VBoxTray: WTSUnRegisterSessionNotification not found\n"));
    1081             rc = VERR_NOT_SUPPORTED;
    1082         }
    1083 
    1084         *(uintptr_t *)&gVBoxSt.pfnWTSQuerySessionInformationA = (uintptr_t)GetProcAddress(gVBoxSt.hWTSAPI32, "WTSQuerySessionInformationA");
    1085         if (!gVBoxSt.pfnWTSQuerySessionInformationA)
    1086         {
    1087             WARN(("VBoxTray: WTSQuerySessionInformationA not found\n"));
    1088             rc = VERR_NOT_SUPPORTED;
    1089         }
    1090 
    1091         if (rc == VINF_SUCCESS)
     1078        if (RT_SUCCESS(rc))
    10921079        {
    10931080            gVBoxSt.hWTSAPIWnd = hWnd;
    10941081            if (gVBoxSt.pfnWTSRegisterSessionNotification(gVBoxSt.hWTSAPIWnd, NOTIFY_FOR_THIS_SESSION))
    1095             {
    10961082                vboxStCheckState();
    1097             }
    10981083            else
    10991084            {
     
    11021087                if (dwErr == RPC_S_INVALID_BINDING)
    11031088                {
    1104                     gVBoxSt.idDelayedInitTimer = SetTimer(gVBoxSt.hWTSAPIWnd, TIMERID_VBOXTRAY_ST_DELAYED_INIT_TIMER, 2000, (TIMERPROC)NULL);
    1105                     rc = VINF_SUCCESS;
    1106 
     1089                    gVBoxSt.idDelayedInitTimer = SetTimer(gVBoxSt.hWTSAPIWnd, TIMERID_VBOXTRAY_ST_DELAYED_INIT_TIMER,
     1090                                                          2000, (TIMERPROC)NULL);
    11071091                    gVBoxSt.fIsConsole = TRUE;
    11081092                    gVBoxSt.enmConnectState = WTSActive;
     1093                    rc = VINF_SUCCESS;
    11091094                }
    11101095                else
     
    11161101        }
    11171102
    1118         FreeLibrary(gVBoxSt.hWTSAPI32);
     1103        RTLdrClose(gVBoxSt.hLdrModWTSAPI32);
    11191104    }
    11201105    else
    1121     {
    1122         DWORD dwErr = GetLastError();
    1123         WARN(("VBoxTray: WTSAPI32 load failed, error = %08X\n", dwErr));
    1124         rc = RTErrConvertFromWin32(dwErr);
    1125     }
    1126 
    1127     memset(&gVBoxSt, 0, sizeof (gVBoxSt));
     1106        WARN(("VBoxTray: WTSAPI32 load failed, rc = %Rrc\n", rc));
     1107
     1108    RT_ZERO(gVBoxSt);
    11281109    gVBoxSt.fIsConsole = TRUE;
    11291110    gVBoxSt.enmConnectState = WTSActive;
     
    11311112}
    11321113
    1133 static void vboxStTerm()
    1134 {
    1135     if (gVBoxSt.hWTSAPIWnd)
     1114static void vboxStTerm(void)
     1115{
     1116    if (!gVBoxSt.hWTSAPIWnd)
    11361117    {
    11371118        WARN(("VBoxTray: vboxStTerm called for non-initialized St\n"));
     
    11541135    }
    11551136
    1156     FreeLibrary(gVBoxSt.hWTSAPI32);
    1157     memset(&gVBoxSt, 0, sizeof (gVBoxSt));
     1137    RTLdrClose(gVBoxSt.hLdrModWTSAPI32);
     1138    RT_ZERO(gVBoxSt);
    11581139}
    11591140
     
    12281209    BOOL fIsInputDesktop;
    12291210    UINT_PTR idTimer;
    1230     HMODULE hHookModule;
     1211    RTLDRMOD hLdrModHook;
    12311212    BOOL (* pfnVBoxHookInstallActiveDesktopTracker)(HMODULE hDll);
    12321213    BOOL (* pfnVBoxHookRemoveActiveDesktopTracker)();
    1233     HMODULE hUSER32;
    12341214    HDESK (WINAPI * pfnGetThreadDesktop)(DWORD dwThreadId);
    12351215    HDESK (WINAPI * pfnOpenInputDesktop)(DWORD dwFlags, BOOL fInherit, ACCESS_MASK dwDesiredAccess);
     
    12891269    }
    12901270
    1291     memset(&gVBoxDt, 0, sizeof (gVBoxDt));
     1271    RT_ZERO(gVBoxDt);
    12921272
    12931273    gVBoxDt.hNotifyEvent = CreateEvent(NULL, FALSE, FALSE, VBOXHOOK_GLOBAL_DT_EVENT_NAME);
    12941274    if (gVBoxDt.hNotifyEvent != NULL)
    12951275    {
    1296         gVBoxDt.hHookModule = LoadLibrary(VBOXHOOK_DLL_NAME);
    1297         if (gVBoxDt.hHookModule)
    1298         {
    1299             *(uintptr_t *)&gVBoxDt.pfnVBoxHookInstallActiveDesktopTracker = (uintptr_t)GetProcAddress(gVBoxDt.hHookModule, "VBoxHookInstallActiveDesktopTracker");
    1300             if (!gVBoxDt.pfnVBoxHookInstallActiveDesktopTracker)
    1301             {
     1276        /* Load the hook dll and resolve the necessary entry points. */
     1277        rc = RTLdrLoadAppPriv(VBOXHOOK_DLL_NAME, &gVBoxDt.hLdrModHook);
     1278        if (RT_SUCCESS(rc))
     1279        {
     1280            rc = RTLdrGetSymbol(gVBoxDt.hLdrModHook, "VBoxHookInstallActiveDesktopTracker",
     1281                                (void **)&gVBoxDt.pfnVBoxHookInstallActiveDesktopTracker);
     1282            if (RT_SUCCESS(rc))
     1283            {
     1284                rc = RTLdrGetSymbol(gVBoxDt.hLdrModHook, "VBoxHookRemoveActiveDesktopTracker",
     1285                                    (void **)&gVBoxDt.pfnVBoxHookRemoveActiveDesktopTracker);
     1286                if (RT_FAILURE(rc))
     1287                    WARN(("VBoxTray: VBoxHookRemoveActiveDesktopTracker not found\n"));
     1288            }
     1289            else
    13021290                WARN(("VBoxTray: VBoxHookInstallActiveDesktopTracker not found\n"));
    1303                 rc = VERR_NOT_SUPPORTED;
    1304             }
    1305 
    1306             *(uintptr_t *)&gVBoxDt.pfnVBoxHookRemoveActiveDesktopTracker  = (uintptr_t)GetProcAddress(gVBoxDt.hHookModule, "VBoxHookInstallActiveDesktopTracker");
    1307             if (!gVBoxDt.pfnVBoxHookRemoveActiveDesktopTracker)
    1308             {
    1309                 WARN(("VBoxTray: VBoxHookRemoveActiveDesktopTracker not found\n"));
    1310                 rc = VERR_NOT_SUPPORTED;
    1311             }
    1312 
    1313             if (VINF_SUCCESS == rc)
    1314             {
    1315                 gVBoxDt.hUSER32 = LoadLibrary("User32.dll");
    1316                 if (gVBoxDt.hUSER32)
     1291            if (RT_SUCCESS(rc))
     1292            {
     1293                /* Try get the system APIs we need. */
     1294                *(void **)&gVBoxDt.pfnGetThreadDesktop = RTLdrGetSystemSymbol("User32.dll", "GetThreadDesktop");
     1295                if (!gVBoxDt.pfnGetThreadDesktop)
    13171296                {
    1318                     *(uintptr_t *)&gVBoxDt.pfnGetThreadDesktop = (uintptr_t)GetProcAddress(gVBoxDt.hUSER32, "GetThreadDesktop");
    1319                     if (!gVBoxDt.pfnGetThreadDesktop)
     1297                    WARN(("VBoxTray: GetThreadDesktop not found\n"));
     1298                    rc = VERR_NOT_SUPPORTED;
     1299                }
     1300
     1301                *(void **)&gVBoxDt.pfnOpenInputDesktop = RTLdrGetSystemSymbol("User32.dll", "OpenInputDesktop");
     1302                if (!gVBoxDt.pfnOpenInputDesktop)
     1303                {
     1304                    WARN(("VBoxTray: OpenInputDesktop not found\n"));
     1305                    rc = VERR_NOT_SUPPORTED;
     1306                }
     1307
     1308                *(void **)&gVBoxDt.pfnCloseDesktop = RTLdrGetSystemSymbol("User32.dll", "CloseDesktop");
     1309                if (!gVBoxDt.pfnCloseDesktop)
     1310                {
     1311                    WARN(("VBoxTray: CloseDesktop not found\n"));
     1312                    rc = VERR_NOT_SUPPORTED;
     1313                }
     1314
     1315                if (RT_SUCCESS(rc))
     1316                {
     1317                    BOOL fRc = FALSE;
     1318                    /* For Vista and up we need to change the integrity of the security descriptor, too. */
     1319                    if (gMajorVersion >= 6)
    13201320                    {
    1321                         WARN(("VBoxTray: GetThreadDesktop not found\n"));
    1322                         rc = VERR_NOT_SUPPORTED;
    1323                     }
    1324 
    1325                     *(uintptr_t *)&gVBoxDt.pfnOpenInputDesktop = (uintptr_t)GetProcAddress(gVBoxDt.hUSER32, "OpenInputDesktop");
    1326                     if (!gVBoxDt.pfnOpenInputDesktop)
    1327                     {
    1328                         WARN(("VBoxTray: OpenInputDesktop not found\n"));
    1329                         rc = VERR_NOT_SUPPORTED;
    1330                     }
    1331 
    1332                     *(uintptr_t *)&gVBoxDt.pfnCloseDesktop = (uintptr_t)GetProcAddress(gVBoxDt.hUSER32, "CloseDesktop");
    1333                     if (!gVBoxDt.pfnCloseDesktop)
    1334                     {
    1335                         WARN(("VBoxTray: CloseDesktop not found\n"));
    1336                         rc = VERR_NOT_SUPPORTED;
    1337                     }
    1338 
    1339                     if (VINF_SUCCESS == rc)
    1340                     {
    1341                         BOOL bRc = FALSE;
    1342                         /* For Vista and up we need to change the integrity of the security descriptor, too. */
    1343                         if (gMajorVersion >= 6)
     1321                        HMODULE hModHook = (HMODULE)RTLdrGetNativeHandle(gVBoxDt.hLdrModHook);
     1322                        Assert((uintptr_t)hModHook != ~(uintptr_t)0);
     1323                        fRc = gVBoxDt.pfnVBoxHookInstallActiveDesktopTracker(hModHook);
     1324                        if (!fRc)
    13441325                        {
    1345                             bRc = gVBoxDt.pfnVBoxHookInstallActiveDesktopTracker(gVBoxDt.hHookModule);
    1346                             if (!bRc)
    1347                             {
    1348                                 DWORD dwErr = GetLastError();
    1349                                 WARN(("VBoxTray: pfnVBoxHookInstallActiveDesktopTracker failed, last error = %08X\n", dwErr));
    1350                             }
    1351                         }
    1352 
    1353                         if (!bRc)
    1354                         {
    1355                             gVBoxDt.idTimer = SetTimer(ghwndToolWindow, TIMERID_VBOXTRAY_DT_TIMER, 500, (TIMERPROC)NULL);
    1356                             if (!gVBoxDt.idTimer)
    1357                             {
    1358                                 DWORD dwErr = GetLastError();
    1359                                 WARN(("VBoxTray: SetTimer error %08X\n", dwErr));
    1360                                 rc = RTErrConvertFromWin32(dwErr);
    1361                             }
    1362                         }
    1363 
    1364                         if (RT_SUCCESS(rc))
    1365                         {
    1366                             gVBoxDt.fIsInputDesktop = vboxDtCalculateIsInputDesktop();
    1367                             return VINF_SUCCESS;
     1326                            DWORD dwErr = GetLastError();
     1327                            WARN(("VBoxTray: pfnVBoxHookInstallActiveDesktopTracker failed, last error = %08X\n", dwErr));
    13681328                        }
    13691329                    }
    1370                     FreeLibrary(gVBoxDt.hUSER32);
     1330
     1331                    if (!fRc)
     1332                    {
     1333                        gVBoxDt.idTimer = SetTimer(ghwndToolWindow, TIMERID_VBOXTRAY_DT_TIMER, 500, (TIMERPROC)NULL);
     1334                        if (!gVBoxDt.idTimer)
     1335                        {
     1336                            DWORD dwErr = GetLastError();
     1337                            WARN(("VBoxTray: SetTimer error %08X\n", dwErr));
     1338                            rc = RTErrConvertFromWin32(dwErr);
     1339                        }
     1340                    }
     1341
     1342                    if (RT_SUCCESS(rc))
     1343                    {
     1344                        gVBoxDt.fIsInputDesktop = vboxDtCalculateIsInputDesktop();
     1345                        return VINF_SUCCESS;
     1346                    }
    13711347                }
    13721348            }
    13731349
    1374             FreeLibrary(gVBoxDt.hHookModule);
     1350            RTLdrClose(gVBoxDt.hLdrModHook);
    13751351        }
    13761352        else
     
    13911367
    13921368
    1393     memset(&gVBoxDt, 0, sizeof (gVBoxDt));
     1369    RT_ZERO(gVBoxDt);
    13941370    gVBoxDt.fIsInputDesktop = TRUE;
    13951371
     
    13991375static void vboxDtTerm()
    14001376{
    1401     if (!gVBoxDt.hHookModule)
     1377    if (!gVBoxDt.hLdrModHook)
    14021378        return;
    14031379
    14041380    gVBoxDt.pfnVBoxHookRemoveActiveDesktopTracker();
    14051381
    1406     FreeLibrary(gVBoxDt.hUSER32);
    1407     FreeLibrary(gVBoxDt.hHookModule);
     1382    RTLdrClose(gVBoxDt.hLdrModHook);
    14081383    CloseHandle(gVBoxDt.hNotifyEvent);
    14091384
    1410     memset(&gVBoxDt, 0, sizeof (gVBoxDt));
     1385    RT_ZERO(gVBoxDt);
    14111386}
    14121387/* @returns true on "IsInputDesktop" state change */
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxVRDP.cpp

    r33966 r46593  
    2525#include <VBoxGuestInternal.h>
    2626#include <iprt/assert.h>
     27#include <iprt/ldr.h>
    2728
    2829
     
    256257    BOOL fSavedThemeEnabled;
    257258
    258     HMODULE hModule;
     259    RTLDRMOD hModUxTheme;
    259260
    260261    HRESULT (* pfnEnableTheming)(BOOL fEnable);
     
    274275    gCtx.fSavedThemeEnabled = FALSE;
    275276
    276     gCtx.hModule = LoadLibrary("UxTheme");
    277 
    278     if (gCtx.hModule)
    279     {
    280         *(uintptr_t *)&gCtx.pfnEnableTheming = (uintptr_t)GetProcAddress(gCtx.hModule, "EnableTheming");
    281         *(uintptr_t *)&gCtx.pfnIsThemeActive = (uintptr_t)GetProcAddress(gCtx.hModule, "IsThemeActive");
     277    int rc = RTLdrLoadSystem("UxTheme.dll", false /*fNoUnload*/, &gCtx.hModUxTheme);
     278    if (RT_SUCCESS(rc))
     279    {
     280        *(PFNRT *)&gCtx.pfnEnableTheming = RTLdrGetFunction(gCtx.hModUxTheme, "EnableTheming");
     281        *(PFNRT *)&gCtx.pfnIsThemeActive = RTLdrGetFunction(gCtx.hModUxTheme, "IsThemeActive");
    282282    }
    283283    else
    284284    {
    285         gCtx.pfnEnableTheming = 0;
     285        gCtx.hModUxTheme = NIL_RTLDRMOD;
     286        gCtx.pfnEnableTheming = NULL;
     287        gCtx.pfnIsThemeActive = NULL;
    286288    }
    287289
     
    297299    VBOXVRDPCONTEXT *pCtx = (VBOXVRDPCONTEXT *)pInstance;
    298300    vboxExperienceRestore (pCtx->level);
    299     if (gCtx.hModule)
    300         FreeLibrary(gCtx.hModule);
    301     gCtx.hModule = 0;
     301    if (gCtx.hModUxTheme != NIL_RTLDRMOD)
     302    {
     303        RTLdrClose(gCtx.hModUxTheme);
     304        gCtx.hModUxTheme = NIL_RTLDRMOD;
     305    }
    302306    return;
    303307}
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