VirtualBox

Changeset 2434 in vbox for trunk


Ignore:
Timestamp:
Apr 30, 2007 2:18:37 PM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
20843
Message:

Main: Fixed: VirtualBox would allow to create host network interfaces with non-ASCII names but would not see them.

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/HostImpl.cpp

    r2333 r2434  
    419419    std::list <ComObjPtr <HostNetworkInterface> > list;
    420420
     421    static const char *NetworkKey = "SYSTEM\\CurrentControlSet\\Control\\Network\\"
     422                                    "{4D36E972-E325-11CE-BFC1-08002BE10318}";
    421423    HKEY hCtrlNet;
    422424    LONG status;
    423425    DWORD len;
    424     int i = 0;
    425     status = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
    426                            "SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}",
    427                            0, KEY_READ, &hCtrlNet);
     426    status = RegOpenKeyExA (HKEY_LOCAL_MACHINE, NetworkKey, 0, KEY_READ, &hCtrlNet);
    428427    if (status != ERROR_SUCCESS)
    429         return setError(E_FAIL, tr("Could not open registry key"));
    430 
    431     while (true)
    432     {
    433         char szNetworkGUID[256];
     428        return setError (E_FAIL, tr("Could not open registry key \"%s\""), NetworkKey);
     429
     430    for (int i = 0;; ++ i)
     431    {
     432        char szNetworkGUID [256];
    434433        HKEY hConnection;
    435         char szNetworkConnection[256];
     434        char szNetworkConnection [256];
    436435
    437436        len = sizeof (szNetworkGUID);
    438         status = RegEnumKeyExA(hCtrlNet, i, szNetworkGUID, &len, NULL, NULL, NULL, NULL);
     437        status = RegEnumKeyExA (hCtrlNet, i, szNetworkGUID, &len, NULL, NULL, NULL, NULL);
    439438        if (status != ERROR_SUCCESS)
    440439            break;
    441440
    442         RTStrPrintf(szNetworkConnection, sizeof(szNetworkConnection), "%s\\Connection", szNetworkGUID);
    443         status = RegOpenKeyExA(hCtrlNet, szNetworkConnection, 0, KEY_READ,  &hConnection);
     441        if (!IsTAPDevice(szNetworkGUID))
     442            continue;
     443
     444        RTStrPrintf (szNetworkConnection, sizeof (szNetworkConnection),
     445                     "%s\\Connection", szNetworkGUID);
     446        status = RegOpenKeyExA (hCtrlNet, szNetworkConnection, 0, KEY_READ,  &hConnection);
    444447        if (status == ERROR_SUCCESS)
    445448        {
    446449            DWORD dwKeyType;
    447 
    448             len = sizeof (szNetworkConnection);
    449             status = RegQueryValueExA(hConnection, "Name", NULL, &dwKeyType, (LPBYTE)szNetworkConnection, &len);
     450            status = RegQueryValueExW (hConnection, TEXT("Name"), NULL,
     451                                       &dwKeyType, NULL, &len);
    450452            if (status == ERROR_SUCCESS && dwKeyType == REG_SZ)
    451453            {
    452                 if (IsTAPDevice(szNetworkGUID))
     454                size_t uniLen = (len + sizeof (OLECHAR) - 1) / sizeof (OLECHAR);
     455                Bstr name (uniLen + 1 /* extra zero */);
     456                status = RegQueryValueExW (hConnection, TEXT("Name"), NULL,
     457                                           &dwKeyType, (LPBYTE) name.mutableRaw(), &len);
     458                if (status == ERROR_SUCCESS)
    453459                {
     460                    /* put a trailing zero, just in case (see MSDN) */
     461                    name.mutableRaw() [uniLen] = 0;
    454462                    /* create a new object and add it to the list */
    455                     ComObjPtr<HostNetworkInterface> networkInterfaceObj;
    456                     networkInterfaceObj.createObject();
     463                    ComObjPtr <HostNetworkInterface> iface;
     464                    iface.createObject();
    457465                    /* remove the curly bracket at the end */
    458                     szNetworkGUID[strlen(szNetworkGUID) - 1] = '\0';
    459                     if (SUCCEEDED(networkInterfaceObj->init(Bstr(szNetworkConnection), Guid(szNetworkGUID + 1))))
    460                         list.push_back(networkInterfaceObj);
     466                    szNetworkGUID [strlen(szNetworkGUID) - 1] = '\0';
     467                    if (SUCCEEDED (iface->init (name, Guid (szNetworkGUID + 1))))
     468                        list.push_back (iface);
    461469                }
    462470            }
    463471            RegCloseKey (hConnection);
    464472        }
    465         ++i;
    466473    }
    467474    RegCloseKey (hCtrlNet);
    468475
    469     ComObjPtr<HostNetworkInterfaceCollection> collection;
     476    ComObjPtr <HostNetworkInterfaceCollection> collection;
    470477    collection.createObject();
    471     collection->init(list);
    472     collection.queryInterfaceTo(networkInterfaces);
     478    collection->init (list);
     479    collection.queryInterfaceTo (networkInterfaces);
    473480    return S_OK;
    474481}
  • trunk/src/VBox/Main/HostNetworkInterfaceImpl.cpp

    r1 r2434  
    4444HRESULT HostNetworkInterface::init (Bstr interfaceName, Guid guid)
    4545{
    46     ComAssertRet (interfaceName && !guid.isEmpty(), E_INVALIDARG);
     46    ComAssertRet (interfaceName, E_INVALIDARG);
     47    ComAssertRet (!guid.isEmpty(), E_INVALIDARG);
    4748
    4849    AutoLock lock(this);
Note: See TracChangeset for help on using the changeset viewer.

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