- Timestamp:
- Apr 30, 2007 2:18:37 PM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 20843
- Location:
- trunk/src/VBox/Main
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/HostImpl.cpp
r2333 r2434 419 419 std::list <ComObjPtr <HostNetworkInterface> > list; 420 420 421 static const char *NetworkKey = "SYSTEM\\CurrentControlSet\\Control\\Network\\" 422 "{4D36E972-E325-11CE-BFC1-08002BE10318}"; 421 423 HKEY hCtrlNet; 422 424 LONG status; 423 425 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); 428 427 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]; 434 433 HKEY hConnection; 435 char szNetworkConnection [256];434 char szNetworkConnection [256]; 436 435 437 436 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); 439 438 if (status != ERROR_SUCCESS) 440 439 break; 441 440 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); 444 447 if (status == ERROR_SUCCESS) 445 448 { 446 449 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); 450 452 if (status == ERROR_SUCCESS && dwKeyType == REG_SZ) 451 453 { 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) 453 459 { 460 /* put a trailing zero, just in case (see MSDN) */ 461 name.mutableRaw() [uniLen] = 0; 454 462 /* create a new object and add it to the list */ 455 ComObjPtr <HostNetworkInterface> networkInterfaceObj;456 networkInterfaceObj.createObject();463 ComObjPtr <HostNetworkInterface> iface; 464 iface.createObject(); 457 465 /* 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); 461 469 } 462 470 } 463 471 RegCloseKey (hConnection); 464 472 } 465 ++i;466 473 } 467 474 RegCloseKey (hCtrlNet); 468 475 469 ComObjPtr <HostNetworkInterfaceCollection> collection;476 ComObjPtr <HostNetworkInterfaceCollection> collection; 470 477 collection.createObject(); 471 collection->init (list);472 collection.queryInterfaceTo (networkInterfaces);478 collection->init (list); 479 collection.queryInterfaceTo (networkInterfaces); 473 480 return S_OK; 474 481 } -
trunk/src/VBox/Main/HostNetworkInterfaceImpl.cpp
r1 r2434 44 44 HRESULT HostNetworkInterface::init (Bstr interfaceName, Guid guid) 45 45 { 46 ComAssertRet (interfaceName && !guid.isEmpty(), E_INVALIDARG); 46 ComAssertRet (interfaceName, E_INVALIDARG); 47 ComAssertRet (!guid.isEmpty(), E_INVALIDARG); 47 48 48 49 AutoLock lock(this);
Note:
See TracChangeset
for help on using the changeset viewer.