VirtualBox

Changeset 19513 in vbox


Ignore:
Timestamp:
May 8, 2009 8:25:46 AM (16 years ago)
Author:
vboxsync
Message:

VBoxService/common:

File:
1 edited

Legend:

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

    r19374 r19513  
    3131#include <Ntsecapi.h>
    3232#else
     33# include <errno.h>
    3334# include <unistd.h>
    34 # include <errno.h>
     35# include <utmp.h>
    3536#endif
    3637
     
    106107    HMODULE hKernel32 = LoadLibrary(_T("kernel32"));
    107108    if (NULL != hKernel32)
    108     {   
     109    {
    109110        g_pfnWTSGetActiveConsoleSessionId = (fnWTSGetActiveConsoleSessionId)GetProcAddress(hKernel32, "WTSGetActiveConsoleSessionId");
    110111        FreeLibrary(hKernel32);
     
    114115    rc = VbglR3GuestPropConnect(&g_VMInfoGuestPropSvcClientID);
    115116    if (!RT_SUCCESS(rc))
    116     {   
     117    {
    117118        VBoxServiceError("Failed to connect to the guest property service! Error: %Rrc\n", rc);
    118119    }
     
    181182
    182183        char* pszTemp = NULL;
    183    
     184
    184185        /* This function can report stale or orphaned interactive logon sessions of already logged
    185186           off users (especially in Windows 2000). */
    186187        r = ::LsaEnumerateLogonSessions(&ulCount, &pSessions);
    187188        VBoxServiceVerbose(3, "Users: Found %ld users.\n", ulCount);
    188    
     189
    189190        if (r != STATUS_SUCCESS)
    190191        {
     
    192193            return 1;
    193194        }
    194    
     195
    195196        PLUID pLuid = NULL;
    196197        DWORD dwNumOfProcLUIDs = VboxServiceVMInfoWinGetLUIDsFromProcesses(&pLuid);
    197    
     198
    198199        VBOXSERVICEVMINFOUSER userInfo;
    199200        ZeroMemory (&userInfo, sizeof(VBOXSERVICEVMINFOUSER));
    200    
     201
    201202        for (int i = 0; i<(int)ulCount; i++)
    202203        {
     
    205206                if (uiUserCount > 0)
    206207                    strcat (szUserList, ",");
    207    
     208
    208209                uiUserCount++;
    209210
     
    213214            }
    214215        }
    215    
     216
    216217        if (NULL != pLuid)
    217218            ::LocalFree (pLuid);
     
    219220        ::LsaFreeReturnBuffer(pSessions);
    220221#else
    221         /** @todo Nothing here yet - Implement other platforms here. */
     222        utmp* ut_user;
     223                rc = utmpname(UTMP_FILE);
     224                if (rc != 0)
     225                {
     226                        VBoxServiceError("Could not set  UTMP file! Error: %ld", errno);
     227                }
     228                setutent();
     229                while ((ut_user=getutent()))
     230                {
     231                        /* Make sure we don't add user names which are not
     232                         * part of type USER_PROCESS and don't add same users twice. */
     233                        if (   (ut_user->ut_type == USER_PROCESS)
     234                                && (strstr(szUserList, ut_user->ut_user) == NULL))
     235                        {
     236                                if (uiUserCount > 0)
     237                                        strcat(szUserList, ",");
     238                                strcat(szUserList, ut_user->ut_user);
     239                                uiUserCount++;
     240                        }
     241                }
     242                endutent();
    222243#endif /* !RT_OS_WINDOWS */
    223244
     
    246267            return -1;
    247268        }
    248    
     269
    249270        INTERFACE_INFO InterfaceList[20] = {0};
    250271        unsigned long nBytesReturned = 0;
    251         if (WSAIoctl(sd, 
    252                      SIO_GET_INTERFACE_LIST, 
    253                      0, 
    254                      0, 
     272        if (WSAIoctl(sd,
     273                     SIO_GET_INTERFACE_LIST,
     274                     0,
     275                     0,
    255276                     &InterfaceList,
    256                      sizeof(InterfaceList), 
    257                      &nBytesReturned, 
    258                      0, 
     277                     sizeof(InterfaceList),
     278                     &nBytesReturned,
     279                     0,
    259280                     0) ==  SOCKET_ERROR)
    260281        {
     
    262283            return -1;
    263284        }
    264    
     285
    265286        char szPropPath [_MAX_PATH] = {0};
    266287        char szTemp [_MAX_PATH] = {0};
    267288        int nNumInterfaces = nBytesReturned / sizeof(INTERFACE_INFO);
    268289        int iCurIface = 0;
    269    
     290
    270291        RTStrPrintf(szPropPath, sizeof(szPropPath), "GuestInfo/Net/Count");
    271292        VboxServiceWritePropInt(g_VMInfoGuestPropSvcClientID, szPropPath, (nNumInterfaces > 1 ? nNumInterfaces-1 : 0));
    272    
     293
    273294        /** @todo Use GetAdaptersInfo() and GetAdapterAddresses (IPv4 + IPv6) for more information. */
    274295
     
    277298            if (InterfaceList[i].iiFlags & IFF_LOOPBACK)    /* Skip loopback device. */
    278299                continue;
    279    
     300
    280301            sockaddr_in *pAddress;
    281302            pAddress = (sockaddr_in *) & (InterfaceList[i].iiAddress);
    282303            RTStrPrintf(szPropPath, sizeof(szPropPath), "GuestInfo/Net/%d/V4/IP", iCurIface);
    283304            VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, szPropPath, inet_ntoa(pAddress->sin_addr));
    284    
     305
    285306            pAddress = (sockaddr_in *) & (InterfaceList[i].iiBroadcastAddress);
    286307            RTStrPrintf(szPropPath, sizeof(szPropPath), "GuestInfo/Net/%d/V4/Broadcast", iCurIface);
    287308            VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, szPropPath, inet_ntoa(pAddress->sin_addr));
    288    
     309
    289310            pAddress = (sockaddr_in *) & (InterfaceList[i].iiNetmask);
    290311            RTStrPrintf(szPropPath, sizeof(szPropPath), "GuestInfo/Net/%d/V4/Netmask", iCurIface);
    291312            VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, szPropPath, inet_ntoa(pAddress->sin_addr));
    292    
     313
    293314            u_long nFlags = InterfaceList[i].iiFlags;
    294315            if (nFlags & IFF_UP)
     
    296317            else
    297318                RTStrPrintf(szTemp, sizeof(szTemp), "Down");
    298    
     319
    299320            RTStrPrintf(szPropPath, sizeof(szPropPath), "GuestInfo/Net/%d/Status", iCurIface);
    300321            VboxServiceWriteProp(g_VMInfoGuestPropSvcClientID, szPropPath, szTemp);
    301    
     322
    302323            iCurIface++;
    303324        }
    304    
     325
    305326        closesocket(sd);
    306327#endif /* !RT_OS_WINDOWS */
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