VirtualBox

Ignore:
Timestamp:
Sep 28, 2015 2:26:35 AM (9 years ago)
Author:
vboxsync
Message:

VBoxServiceVMInfo-win.cpp: Just resolve stuff dynamically once, especially the windows version info. Dropped the #ifndef TARGET_NT4. Only tested on NT4.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceVMInfo-win.cpp

    r57372 r57921  
    2020*   Header Files                                                                                                                 *
    2121*********************************************************************************************************************************/
    22 #if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0502
     22#if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600
    2323# undef  _WIN32_WINNT
    24 # define _WIN32_WINNT 0x0502 /* CachedRemoteInteractive in recent SDKs. */
     24# define _WIN32_WINNT 0x0600 /* QueryFullProcessImageNameW in recent SDKs. */
    2525#endif
    2626#include <Windows.h>
     
    3333#include <iprt/localipc.h>
    3434#include <iprt/mem.h>
    35 #include <iprt/thread.h>
     35#include <iprt/once.h>
    3636#include <iprt/string.h>
    3737#include <iprt/semaphore.h>
    3838#include <iprt/system.h>
    3939#include <iprt/time.h>
     40#include <iprt/thread.h>
     41
    4042#include <VBox/VBoxGuestLib.h>
    4143#include "VBoxServiceInternal.h"
     
    9092
    9193
    92 /*******************************************************************************
    93 *   Prototypes
    94 *******************************************************************************/
    95 uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession, PVBOXSERVICEVMINFOPROC const paProcs, DWORD cProcs);
    96 bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER a_pUserInfo, PLUID a_pSession);
    97 int  VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppProc, DWORD *pdwCount);
    98 void VBoxServiceVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs);
    99 int vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain);
    100 
    101 typedef BOOL WINAPI FNQUERYFULLPROCESSIMAGENAME(HANDLE,  DWORD, LPWSTR, PDWORD);
    102 typedef FNQUERYFULLPROCESSIMAGENAME *PFNQUERYFULLPROCESSIMAGENAME;
    103 
    104 
    105 #ifndef TARGET_NT4
     94/*********************************************************************************************************************************
     95*   Internal Functions                                                                                                           *
     96*********************************************************************************************************************************/
     97static uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession, PVBOXSERVICEVMINFOPROC const paProcs, DWORD cProcs);
     98static bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER a_pUserInfo, PLUID a_pSession);
     99static int  VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppProc, DWORD *pdwCount);
     100static void VBoxServiceVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs);
     101static int  vboxServiceVMInfoWinWriteLastInput(PVBOXSERVICEVEPROPCACHE pCache, const char *pszUser, const char *pszDomain);
     102
     103
     104/*********************************************************************************************************************************
     105*   Global Variables                                                                                                             *
     106*********************************************************************************************************************************/
     107static RTONCE                                   g_vgsvcWinVmInitOnce = RTONCE_INITIALIZER;
     108
     109/** @name Secur32.dll imports are dynamically resolved because of NT4.
     110 * @{ */
     111static decltype(LsaGetLogonSessionData)        *g_pfnLsaGetLogonSessionData = NULL;
     112static decltype(LsaEnumerateLogonSessions)     *g_pfnLsaEnumerateLogonSessions = NULL;
     113static decltype(LsaFreeReturnBuffer)           *g_pfnLsaFreeReturnBuffer = NULL;
     114/** @} */
     115
     116/** @name WtsApi32.dll imports are dynamically resolved because of NT4.
     117 * @{ */
     118static decltype(WTSFreeMemory)                 *g_pfnWTSFreeMemory = NULL;
     119static decltype(WTSQuerySessionInformationA)   *g_pfnWTSQuerySessionInformationA = NULL;
     120/** @} */
     121
     122/** @name PsApi.dll imports are dynamically resolved because of NT4.
     123 * @{ */
     124static decltype(EnumProcesses)                 *g_pfnEnumProcesses = NULL;
     125static decltype(GetModuleFileNameExW)          *g_pfnGetModuleFileNameExW = NULL;
     126/** @} */
     127
     128/** @name New Kernel32.dll APIs we may use when present.
     129 * @{  */
     130static decltype(QueryFullProcessImageNameW)    *g_pfnQueryFullProcessImageNameW = NULL;
     131
     132/** @} */
     133
     134/** Windows version.  */
     135static OSVERSIONINFOEXA                         g_WinVersion;
     136
     137
     138/**
     139 * An RTOnce callback function.
     140 */
     141static DECLCALLBACK(int) vgsvcWinVmInfoInitOnce(void *pvIgnored)
     142{
     143    /* SECUR32 */
     144    RTLDRMOD hLdrMod;
     145    int rc = RTLdrLoadSystem("secur32.dll", true, &hLdrMod);
     146    if (RT_SUCCESS(rc))
     147    {
     148        rc = RTLdrGetSymbol(hLdrMod, "LsaGetLogonSessionData", (void **)&g_pfnLsaGetLogonSessionData);
     149        if (RT_SUCCESS(rc))
     150            rc = RTLdrGetSymbol(hLdrMod, "LsaEnumerateLogonSessions", (void **)&g_pfnLsaEnumerateLogonSessions);
     151        if (RT_SUCCESS(rc))
     152            rc = RTLdrGetSymbol(hLdrMod, "LsaFreeReturnBuffer", (void **)&g_pfnLsaFreeReturnBuffer);
     153        AssertRC(rc);
     154        RTLdrClose(hLdrMod);
     155    }
     156    if (RT_FAILURE(rc))
     157    {
     158        VBoxServiceVerbose(1, "Secur32.dll APIs are not availble (%Rrc)\n", rc);
     159        g_pfnLsaGetLogonSessionData = NULL;
     160        g_pfnLsaEnumerateLogonSessions = NULL;
     161        g_pfnLsaFreeReturnBuffer = NULL;
     162        Assert(g_WinVersion.dwMajorVersion < 5);
     163    }
     164
     165    /* WTSAPI32 */
     166    rc = RTLdrLoadSystem("wtsapi32.dll", true, &hLdrMod);
     167    if (RT_SUCCESS(rc))
     168    {
     169        rc = RTLdrGetSymbol(hLdrMod, "WTSFreeMemory", (void **)&g_pfnWTSFreeMemory);
     170        if (RT_SUCCESS(rc))
     171            rc = RTLdrGetSymbol(hLdrMod, "WTSQuerySessionInformationA", (void **)&g_pfnWTSQuerySessionInformationA);
     172        AssertRC(rc);
     173        RTLdrClose(hLdrMod);
     174    }
     175    if (RT_FAILURE(rc))
     176    {
     177        VBoxServiceVerbose(1, "WtsApi32.dll APIs are not availble (%Rrc)\n", rc);
     178        g_pfnWTSFreeMemory = NULL;
     179        g_pfnWTSQuerySessionInformationA = NULL;
     180        Assert(g_WinVersion.dwMajorVersion < 5);
     181    }
     182
     183    /* PSAPI */
     184    rc = RTLdrLoadSystem("psapi.dll", true, &hLdrMod);
     185    if (RT_SUCCESS(rc))
     186    {
     187        rc = RTLdrGetSymbol(hLdrMod, "EnumProcesses", (void **)&g_pfnEnumProcesses);
     188        if (RT_SUCCESS(rc))
     189            rc = RTLdrGetSymbol(hLdrMod, "GetModuleFileNameExW", (void **)&g_pfnGetModuleFileNameExW);
     190        AssertRC(rc);
     191        RTLdrClose(hLdrMod);
     192    }
     193    if (RT_FAILURE(rc))
     194    {
     195        VBoxServiceVerbose(1, "psapi.dll APIs are not availble (%Rrc)\n", rc);
     196        g_pfnEnumProcesses = NULL;
     197        g_pfnGetModuleFileNameExW = NULL;
     198        Assert(g_WinVersion.dwMajorVersion < 5);
     199    }
     200
     201    /* Kernel32: */
     202    rc = RTLdrLoadSystem("kerne32.dll", true, &hLdrMod);
     203    AssertRCReturn(rc, rc);
     204    rc = RTLdrGetSymbol(hLdrMod, "QueryFullProcessImageNameW", (void **)&g_pfnQueryFullProcessImageNameW);
     205    if (RT_FAILURE(rc))
     206    {
     207        Assert(g_WinVersion.dwMajorVersion < 6);
     208        g_pfnQueryFullProcessImageNameW = NULL;
     209    }
     210    RTLdrClose(hLdrMod);
     211
     212    /*
     213     * Get the extended windows version once and for all.
     214     */
     215    g_WinVersion.dwOSVersionInfoSize = sizeof(g_WinVersion);
     216    if (!GetVersionExA((OSVERSIONINFO *)&g_WinVersion))
     217    {
     218        AssertFailed();
     219        RT_ZERO(g_WinVersion);
     220        g_WinVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
     221        if (!GetVersionExA((OSVERSIONINFO *)&g_WinVersion))
     222            RT_ZERO(g_WinVersion);
     223    }
     224
     225    return VINF_SUCCESS;
     226}
     227
    106228
    107229static bool vboxServiceVMInfoSession0Separation(void)
    108230{
    109     /** @todo Only do this once. Later. */
    110     OSVERSIONINFOEX OSInfoEx;
    111     RT_ZERO(OSInfoEx);
    112     OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    113     if (   !GetVersionEx((LPOSVERSIONINFO) &OSInfoEx)
    114         || OSInfoEx.dwPlatformId != VER_PLATFORM_WIN32_NT)
    115     {
    116         /* Platform other than NT (e.g. Win9x) not supported. */
    117         return false;
    118     }
    119 
    120     if (   OSInfoEx.dwMajorVersion >= 6
    121         && OSInfoEx.dwMinorVersion >= 0)
    122     {
    123         return true;
    124     }
    125 
    126     return false;
     231    return g_WinVersion.dwPlatformId == VER_PLATFORM_WIN32_NT
     232        && g_WinVersion.dwMajorVersion >= 6; /* Vista = 6.0 */
    127233}
     234
    128235
    129236/**
     
    139246
    140247    /** @todo Only do this once. Later. */
    141     OSVERSIONINFOEX OSInfoEx;
    142     RT_ZERO(OSInfoEx);
    143     OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    144     if (   !GetVersionEx((LPOSVERSIONINFO) &OSInfoEx)
    145         || OSInfoEx.dwPlatformId != VER_PLATFORM_WIN32_NT)
    146     {
    147         /* Platform other than NT (e.g. Win9x) not supported. */
     248    /* Platform other than NT (e.g. Win9x) not supported. */
     249    if (g_WinVersion.dwPlatformId != VER_PLATFORM_WIN32_NT)
    148250        return VERR_NOT_SUPPORTED;
    149     }
    150251
    151252    int rc = VINF_SUCCESS;
    152253
    153254    DWORD dwFlags = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
    154     if (OSInfoEx.dwMajorVersion >= 6 /* Vista or later */)
    155         dwFlags = 0x1000; /* = PROCESS_QUERY_LIMITED_INFORMATION; less privileges needed. */
     255    if (g_WinVersion.dwMajorVersion >= 6 /* Vista or later */)
     256        dwFlags = PROCESS_QUERY_LIMITED_INFORMATION; /* possible to do on more processes */
    156257
    157258    HANDLE h = OpenProcess(dwFlags, FALSE, pProc->id);
     
    169270           apps and vice verse) we have to use a different code path for Vista and up. */
    170271        WCHAR wszName[_1K];
    171         DWORD dwLen = sizeof(wszName);
    172 
    173         /* Note: For 2000 + NT4 we might just use GetModuleFileNameW() instead. */
    174         if (OSInfoEx.dwMajorVersion >= 6 /* Vista or later */)
    175         {
    176             /* Loading the module and getting the symbol for each and every process is expensive
    177              * -- since this function (at the moment) only is used for debugging purposes it's okay. */
    178             PFNQUERYFULLPROCESSIMAGENAME pfnQueryFullProcessImageName;
    179             pfnQueryFullProcessImageName = (PFNQUERYFULLPROCESSIMAGENAME)
    180                 RTLdrGetSystemSymbol("kernel32.dll", "QueryFullProcessImageNameW");
    181             if (pfnQueryFullProcessImageName)
    182             {
    183                 if (!pfnQueryFullProcessImageName(h, 0 /*PROCESS_NAME_NATIVE*/, wszName, &dwLen))
    184                     rc = VERR_ACCESS_DENIED;
    185             }
    186         }
    187         else
    188         {
    189             if (!GetModuleFileNameExW(h, NULL /* Get main executable */, wszName, dwLen))
     272        DWORD dwLen = sizeof(wszName); /** @todo r=bird: wrong? */
     273
     274        /* Use QueryFullProcessImageNameW if available (Vista+). */
     275        if (g_pfnQueryFullProcessImageNameW)
     276        {
     277            if (!g_pfnQueryFullProcessImageNameW(h, 0 /*PROCESS_NAME_NATIVE*/, wszName, &dwLen))
    190278                rc = VERR_ACCESS_DENIED;
    191279        }
     280        else if (!g_pfnGetModuleFileNameExW(h, NULL /* Get main executable */, wszName, dwLen))
     281            rc = VERR_ACCESS_DENIED;
    192282
    193283        if (   RT_FAILURE(rc)
     
    436526 * @param   pcProcs     Where to store the returned process count.
    437527 */
    438 int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppaProcs, PDWORD pcProcs)
     528static int VBoxServiceVMInfoWinProcessesEnumerate(PVBOXSERVICEVMINFOPROC *ppaProcs, PDWORD pcProcs)
    439529{
    440530    AssertPtr(ppaProcs);
    441531    AssertPtr(pcProcs);
     532
     533    if (!g_pfnEnumProcesses)
     534        return VERR_NOT_SUPPORTED;
    442535
    443536    /*
     
    462555        /* Query the processes. Not the cbRet == buffer size means there could be more work to be done. */
    463556        DWORD cbRet;
    464         if (!EnumProcesses(paPID, cProcesses * sizeof(DWORD), &cbRet))
     557        if (!g_pfnEnumProcesses(paPID, cProcesses * sizeof(DWORD), &cbRet))
    465558        {
    466559            rc = RTErrConvertFromWin32(GetLastError());
     
    528621 * @param   paProcs     What
    529622 */
    530 void VBoxServiceVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs)
     623static void VBoxServiceVMInfoWinProcessesFree(DWORD cProcs, PVBOXSERVICEVMINFOPROC paProcs)
    531624{
    532625    for (DWORD i = 0; i < cProcs; i++)
     
    551644 * @param   puSession       Looked up session number.  Optional.
    552645 */
    553 uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession,
    554                                                  PVBOXSERVICEVMINFOPROC const paProcs, DWORD cProcs,
    555                                                  PULONG puTerminalSession)
     646static uint32_t VBoxServiceVMInfoWinSessionHasProcesses(PLUID pSession,
     647                                                        PVBOXSERVICEVMINFOPROC const paProcs, DWORD cProcs,
     648                                                        PULONG puTerminalSession)
    556649{
    557650    if (!pSession)
     
    560653        return 0;
    561654    }
     655    if (!g_pfnLsaGetLogonSessionData)
     656        return VERR_NOT_SUPPORTED;
    562657
    563658    PSECURITY_LOGON_SESSION_DATA pSessionData = NULL;
    564     NTSTATUS rcNt = LsaGetLogonSessionData(pSession, &pSessionData);
     659    NTSTATUS rcNt = g_pfnLsaGetLogonSessionData(pSession, &pSessionData);
    565660    if (rcNt != STATUS_SUCCESS)
    566661    {
     
    573668       VBoxServiceError("User SID=%p is not valid\n", pSessionData->Sid);
    574669       if (pSessionData)
    575            LsaFreeReturnBuffer(pSessionData);
     670           g_pfnLsaFreeReturnBuffer(pSessionData);
    576671       return 0;
    577672    }
    578673
    579     int rc = VINF_SUCCESS;
    580674
    581675    /*
     
    584678     * session <-> process LUIDs.
    585679     */
    586     uint32_t cNumProcs = 0;
    587 
     680    int rc = VINF_SUCCESS;
     681    uint32_t cProcessesFound = 0;
    588682    for (DWORD i = 0; i < cProcs; i++)
    589683    {
     
    608702                if (paProcs[i].fInteractive)
    609703                {
    610                     cNumProcs++;
     704                    cProcessesFound++;
    611705                    if (!g_cVerbosity) /* We want a bit more info on higher verbosity. */
    612706                        break;
     
    619713        *puTerminalSession = pSessionData->Session;
    620714
    621     LsaFreeReturnBuffer(pSessionData);
    622 
    623     return cNumProcs;
     715    g_pfnLsaFreeReturnBuffer(pSessionData);
     716
     717    return cProcessesFound;
    624718}
    625719
     
    657751 * @param   pSession            The session to check.
    658752 */
    659 bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSession)
     753static bool VBoxServiceVMInfoWinIsLoggedIn(PVBOXSERVICEVMINFOUSER pUserInfo, PLUID pSession)
    660754{
    661755    AssertPtrReturn(pUserInfo, false);
    662756    if (!pSession)
    663757        return false;
     758    if (!g_pfnLsaGetLogonSessionData)
     759        return false;
    664760
    665761    PSECURITY_LOGON_SESSION_DATA pSessionData = NULL;
    666     NTSTATUS rcNt = LsaGetLogonSessionData(pSession, &pSessionData);
     762    NTSTATUS rcNt = g_pfnLsaGetLogonSessionData(pSession, &pSessionData);
    667763    if (rcNt != STATUS_SUCCESS)
    668764    {
     
    686782        }
    687783        if (pSessionData)
    688             LsaFreeReturnBuffer(pSessionData);
     784            g_pfnLsaFreeReturnBuffer(pSessionData);
    689785        return false;
    690786    }
     
    709805            || pSessionData->LogonTime.QuadPart == 0)
    710806        {
    711             LsaFreeReturnBuffer(pSessionData);
     807            g_pfnLsaFreeReturnBuffer(pSessionData);
    712808            return false;
    713809        }
     
    781877                if (!s_fSkipRDPDetection)
    782878                {
    783                     /** @todo Only do this once. Later. */
    784                     OSVERSIONINFOEX OSInfoEx;
    785                     RT_ZERO(OSInfoEx);
    786                     OSInfoEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    787 
    788879                    /* Skip RDP detection on non-NT systems. */
    789                     if (   !GetVersionEx((LPOSVERSIONINFO) &OSInfoEx)
    790                         || OSInfoEx.dwPlatformId != VER_PLATFORM_WIN32_NT)
    791                     {
     880                    if (g_WinVersion.dwPlatformId != VER_PLATFORM_WIN32_NT)
    792881                        s_fSkipRDPDetection = true;
    793                     }
     882
    794883                    /* Skip RDP detection on Windows 2000.
    795884                     * For Windows 2000 however we don't have any hotfixes, so just skip the
    796885                     * RDP detection in any case. */
    797                     if (   OSInfoEx.dwMajorVersion == 5
    798                         && OSInfoEx.dwMinorVersion == 0)
    799                     {
     886                    if (   g_WinVersion.dwMajorVersion == 5
     887                        && g_WinVersion.dwMinorVersion == 0)
    800888                        s_fSkipRDPDetection = true;
    801                     }
     889
     890                    /* Skip if we don't have the WTS API. */
     891                    if (!g_pfnWTSQuerySessionInformationA)
     892                        s_fSkipRDPDetection = true;
    802893
    803894                    if (s_fSkipRDPDetection)
     
    807898                if (!s_fSkipRDPDetection)
    808899                {
     900                    Assert(g_pfnWTSQuerySessionInformationA);
     901                    Assert(g_pfnWTSFreeMemory);
     902
    809903                    /* Detect RDP sessions as well. */
    810904                    LPTSTR  pBuffer = NULL;
    811905                    DWORD   cbRet   = 0;
    812906                    int     iState  = -1;
    813                     if (WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,
    814                                                    pSessionData->Session,
    815                                                    WTSConnectState,
    816                                                    &pBuffer,
    817                                                    &cbRet))
     907                    if (g_pfnWTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE,
     908                                                         pSessionData->Session,
     909                                                         WTSConnectState,
     910                                                         &pBuffer,
     911                                                         &cbRet))
    818912                    {
    819913                        if (cbRet)
     
    832926                        }
    833927                        if (pBuffer)
    834                             WTSFreeMemory(pBuffer);
     928                            g_pfnWTSFreeMemory(pBuffer);
    835929                    }
    836930                    else
     
    871965        pUserInfo->ulLastSession = pSessionData->Session;
    872966
    873     LsaFreeReturnBuffer(pSessionData);
     967    g_pfnLsaFreeReturnBuffer(pSessionData);
    874968    return fFoundUser;
    875969}
     
    10151109    AssertPtrReturn(pcUsersInList, VERR_INVALID_POINTER);
    10161110
    1017     int rc2 = VbglR3GuestPropConnect(&s_uDebugGuestPropClientID);
    1018     AssertRC(rc2);
     1111    int rc = RTOnce(&g_vgsvcWinVmInitOnce, vgsvcWinVmInfoInitOnce, NULL);
     1112    if (RT_FAILURE(rc))
     1113        return rc;
     1114    if (!g_pfnLsaEnumerateLogonSessions || !g_pfnEnumProcesses)
     1115        return VERR_NOT_SUPPORTED;
     1116
     1117    rc = VbglR3GuestPropConnect(&s_uDebugGuestPropClientID);
     1118    AssertRC(rc);
    10191119
    10201120    char *pszUserList = NULL;
     
    10251125    PLUID    paSessions = NULL;
    10261126    ULONG    cSessions = 0;
    1027     NTSTATUS rcNt = LsaEnumerateLogonSessions(&cSessions, &paSessions);
     1127    NTSTATUS rcNt = g_pfnLsaEnumerateLogonSessions(&cSessions, &paSessions);
    10281128    if (rcNt != STATUS_SUCCESS)
    10291129    {
     
    10481148
    10491149        if (paSessions)
    1050             LsaFreeReturnBuffer(paSessions);
     1150            g_pfnLsaFreeReturnBuffer(paSessions);
    10511151
    10521152        return RTErrConvertFromWin32(ulError);
     
    10561156    PVBOXSERVICEVMINFOPROC  paProcs;
    10571157    DWORD                   cProcs;
    1058     int rc = VBoxServiceVMInfoWinProcessesEnumerate(&paProcs, &cProcs);
     1158    rc = VBoxServiceVMInfoWinProcessesEnumerate(&paProcs, &cProcs);
    10591159    if (RT_FAILURE(rc))
    10601160    {
     
    10741174            ULONG cUniqueUsers = 0;
    10751175
    1076             /**
     1176            /*
    10771177             * Note: The cSessions loop variable does *not* correlate with
    10781178             *       the Windows session ID!
     
    10981198                    if (g_cVerbosity > 3)
    10991199                    {
    1100                         char szDebugSessionPath[255]; RTStrPrintf(szDebugSessionPath,  sizeof(szDebugSessionPath), "/VirtualBox/GuestInfo/Debug/LSA/Session/%RU32",
    1101                                                                   userSession.ulLastSession);
     1200                        char szDebugSessionPath[255];
     1201                        RTStrPrintf(szDebugSessionPath,  sizeof(szDebugSessionPath),
     1202                                    "/VirtualBox/GuestInfo/Debug/LSA/Session/%RU32", userSession.ulLastSession);
    11021203                        VBoxServiceWritePropF(s_uDebugGuestPropClientID, szDebugSessionPath,
    11031204                                              "#%RU32: cSessionProcs=%RU32 (of %RU32 procs total)", s_uDebugIter, cCurSessionProcs, cProcs);
     
    12251326    }
    12261327    if (paSessions)
    1227         LsaFreeReturnBuffer(paSessions);
     1328        g_pfnLsaFreeReturnBuffer(paSessions);
    12281329
    12291330    if (RT_SUCCESS(rc))
     
    12391340}
    12401341
    1241 #endif /* TARGET_NT4 */
    12421342
    12431343int VBoxServiceWinGetComponentVersions(uint32_t uClientID)
     
    12581358
    12591359    /* The file information table. */
    1260 #ifndef TARGET_NT4
    12611360    const VBOXSERVICEVMINFOFILE aVBoxFiles[] =
    12621361    {
     
    12641363        { szSysDir, "VBoxHook.dll" },
    12651364        { szSysDir, "VBoxDisp.dll" },
     1365        { szSysDir, "VBoxTray.exe" },
     1366#ifdef TARGET_NT4
     1367        { szSysDir, "VBoxServiceNT.exe" },
     1368#else
     1369        { szSysDir, "VBoxService.exe" },
    12661370        { szSysDir, "VBoxMRXNP.dll" },
    1267         { szSysDir, "VBoxService.exe" },
    1268         { szSysDir, "VBoxTray.exe" },
    12691371        { szSysDir, "VBoxGINA.dll" },
    12701372        { szSysDir, "VBoxCredProv.dll" },
     1373#endif
    12711374
    12721375 /* On 64-bit we don't yet have the OpenGL DLLs in native format.
    12731376    So just enumerate the 32-bit files in the SYSWOW directory. */
    1274 # ifdef RT_ARCH_AMD64
     1377#ifdef RT_ARCH_AMD64
    12751378        { szSysWowDir, "VBoxOGLarrayspu.dll" },
    12761379        { szSysWowDir, "VBoxOGLcrutil.dll" },
     
    12801383        { szSysWowDir, "VBoxOGLfeedbackspu.dll" },
    12811384        { szSysWowDir, "VBoxOGL.dll" },
    1282 # else  /* !RT_ARCH_AMD64 */
     1385#else  /* !RT_ARCH_AMD64 */
     1386# ifdef TARGET_NT4
    12831387        { szSysDir, "VBoxOGLarrayspu.dll" },
    12841388        { szSysDir, "VBoxOGLcrutil.dll" },
     
    12881392        { szSysDir, "VBoxOGLfeedbackspu.dll" },
    12891393        { szSysDir, "VBoxOGL.dll" },
    1290 # endif /* !RT_ARCH_AMD64 */
    1291 
     1394# endif
     1395#endif /* !RT_ARCH_AMD64 */
     1396
     1397#ifdef TARGET_NT4
     1398        { szDriversDir, "VBoxGuestNT.sys" },
     1399        { szDriversDir, "VBoxMouseNT.sys" },
     1400#else
    12921401        { szDriversDir, "VBoxGuest.sys" },
    12931402        { szDriversDir, "VBoxMouse.sys" },
    12941403        { szDriversDir, "VBoxSF.sys"    },
     1404#endif
    12951405        { szDriversDir, "VBoxVideo.sys" },
    12961406    };
    1297 
    1298 #else  /* TARGET_NT4 */
    1299     const VBOXSERVICEVMINFOFILE aVBoxFiles[] =
    1300     {
    1301         { szSysDir, "VBoxControl.exe" },
    1302         { szSysDir, "VBoxHook.dll" },
    1303         { szSysDir, "VBoxDisp.dll" },
    1304         { szSysDir, "VBoxServiceNT.exe" },
    1305         { szSysDir, "VBoxTray.exe" },
    1306 
    1307         { szDriversDir, "VBoxGuestNT.sys" },
    1308         { szDriversDir, "VBoxMouseNT.sys" },
    1309         { szDriversDir, "VBoxVideo.sys" },
    1310     };
    1311 #endif /* TARGET_NT4 */
    13121407
    13131408    for (unsigned i = 0; i < RT_ELEMENTS(aVBoxFiles); i++)
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