Changeset 60620 in vbox for trunk/src/VBox/HostDrivers
- Timestamp:
- Apr 21, 2016 12:12:08 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 106768
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/VBoxNetFlt/win/cfg/VBoxNetCfg.cpp
r60318 r60620 61 61 #define VBOX_NETCFG_LOCK_TIME_OUT 5000 /** @todo r=bird: What does this do? */ 62 62 63 64 /* 65 * Wrappers for HelpAPI functions 66 */ 67 typedef void FNINITIALIZEIPINTERFACEENTRY( _Inout_ PMIB_IPINTERFACE_ROW row); 68 typedef FNINITIALIZEIPINTERFACEENTRY *PFNINITIALIZEIPINTERFACEENTRY; 69 70 typedef NETIOAPI_API FNGETIPINTERFACEENTRY( _Inout_ PMIB_IPINTERFACE_ROW row); 71 typedef FNGETIPINTERFACEENTRY *PFNGETIPINTERFACEENTRY; 72 73 typedef NETIOAPI_API FNSETIPINTERFACEENTRY( _Inout_ PMIB_IPINTERFACE_ROW row); 74 typedef FNSETIPINTERFACEENTRY *PFNSETIPINTERFACEENTRY; 75 76 static PFNINITIALIZEIPINTERFACEENTRY g_pfnInitializeIpInterfaceEntry = NULL; 77 static PFNGETIPINTERFACEENTRY g_pfnGetIpInterfaceEntry = NULL; 78 static PFNSETIPINTERFACEENTRY g_pfnSetIpInterfaceEntry = NULL; 79 80 63 81 /* 64 82 * Forward declaration for using vboxNetCfgWinSetupMetric() … … 66 84 HRESULT vboxNetCfgWinSetupMetric(IN HKEY hKey); 67 85 HRESULT vboxNetCfgWinGetInterfaceLUID(IN HKEY hKey, OUT NET_LUID* pLUID); 86 68 87 69 88 /* … … 298 317 { 299 318 HKEY hkey; 300 NET_LUID luid;301 319 HRESULT res; 302 320 … … 3357 3375 3358 3376 3377 HRESULT vboxLoadIpHelpFunctions(HINSTANCE& pIpHlpInstance) 3378 { 3379 Assert(pIpHlpInstance != NULL); 3380 3381 pIpHlpInstance = loadSystemDll("Iphlpapi.dll"); 3382 if (pIpHlpInstance == NULL) 3383 return E_FAIL; 3384 3385 g_pfnInitializeIpInterfaceEntry = 3386 (PFNINITIALIZEIPINTERFACEENTRY)GetProcAddress(pIpHlpInstance, "InitializeIpInterfaceEntry"); 3387 Assert(g_pfnInitializeIpInterfaceEntry); 3388 3389 if (g_pfnInitializeIpInterfaceEntry) 3390 { 3391 g_pfnGetIpInterfaceEntry = 3392 (PFNGETIPINTERFACEENTRY)GetProcAddress(pIpHlpInstance, "GetIpInterfaceEntry"); 3393 Assert(g_pfnGetIpInterfaceEntry); 3394 } 3395 3396 if (g_pfnGetIpInterfaceEntry) 3397 { 3398 g_pfnSetIpInterfaceEntry = 3399 (PFNSETIPINTERFACEENTRY)GetProcAddress(pIpHlpInstance, "SetIpInterfaceEntry"); 3400 Assert(g_pfnSetIpInterfaceEntry); 3401 } 3402 3403 if (g_pfnInitializeIpInterfaceEntry == NULL) 3404 { 3405 FreeLibrary(pIpHlpInstance); 3406 pIpHlpInstance = NULL; 3407 return E_FAIL; 3408 } 3409 3410 return S_OK; 3411 } 3412 3413 3359 3414 HRESULT vboxNetCfgWinGetLoopbackMetric(OUT int* Metric) 3360 3415 { 3361 HRESULT status= S_OK;3416 HRESULT rc = S_OK; 3362 3417 MIB_IPINTERFACE_ROW row; 3363 3418 3364 InitializeIpInterfaceEntry(&row); 3419 Assert(g_pfnInitializeIpInterfaceEntry != NULL); 3420 Assert(g_pfnGetIpInterfaceEntry != NULL); 3421 3422 g_pfnInitializeIpInterfaceEntry(&row); 3365 3423 row.Family = AF_INET; 3366 3424 row.InterfaceLuid.Info.IfType = IF_TYPE_SOFTWARE_LOOPBACK; 3367 3425 3368 status =GetIpInterfaceEntry(&row);3369 if ( status!= 0)3426 rc = g_pfnGetIpInterfaceEntry(&row); 3427 if (rc != 0) 3370 3428 return E_FAIL; 3371 3429 3372 3430 *Metric = row.Metric; 3373 3431 3374 return status;3432 return rc; 3375 3433 } 3376 3434 … … 3381 3439 { 3382 3440 MIB_IPINTERFACE_ROW newRow; 3383 InitializeIpInterfaceEntry(&newRow); 3441 3442 Assert(g_pfnInitializeIpInterfaceEntry != NULL); 3443 Assert(g_pfnSetIpInterfaceEntry != NULL); 3444 3445 g_pfnInitializeIpInterfaceEntry(&newRow); 3384 3446 // identificate the interface to change 3385 3447 newRow.InterfaceLuid = *pInterfaceLuid; … … 3390 3452 3391 3453 // change settings 3392 return SetIpInterfaceEntry(&newRow);3454 return g_pfnSetIpInterfaceEntry(&newRow); 3393 3455 } 3394 3456 … … 3427 3489 HRESULT vboxNetCfgWinSetupMetric(IN HKEY hKey) 3428 3490 { 3429 HRESULT status = S_OK; 3491 HRESULT rc = S_OK; 3492 HINSTANCE hModule = NULL; 3430 3493 NET_LUID luid; 3431 3494 int loopbackMetric; 3432 3433 status = vboxNetCfgWinGetInterfaceLUID(hKey, &luid); 3434 if (FAILED(status)) 3435 return status; 3436 3437 status = vboxNetCfgWinGetLoopbackMetric(&loopbackMetric); 3438 if (FAILED(status)) 3439 return status; 3440 3441 status = vboxNetCfgWinSetInterfaceMetric(&luid, loopbackMetric - 1); 3442 3443 return status; 3444 } 3445 3446 3495 3496 rc = vboxLoadIpHelpFunctions(hModule); 3497 3498 if(SUCCEEDED(rc)) 3499 rc = vboxNetCfgWinGetInterfaceLUID(hKey, &luid); 3500 3501 if(SUCCEEDED(rc)) 3502 rc = vboxNetCfgWinGetLoopbackMetric(&loopbackMetric); 3503 3504 if(SUCCEEDED(rc)) 3505 rc = vboxNetCfgWinSetInterfaceMetric(&luid, loopbackMetric - 1); 3506 3507 g_pfnInitializeIpInterfaceEntry = NULL; 3508 g_pfnSetIpInterfaceEntry = NULL; 3509 g_pfnGetIpInterfaceEntry = NULL; 3510 3511 FreeLibrary(hModule); 3512 return rc; 3513 } 3447 3514 #ifdef VBOXNETCFG_DELAYEDRENAME 3448 3515 VBOXNETCFGWIN_DECL(HRESULT) VBoxNetCfgWinRenameHostOnlyConnection(IN const GUID *pGuid, IN LPCWSTR pwszId, OUT BSTR *pDevName)
Note:
See TracChangeset
for help on using the changeset viewer.