VirtualBox

Changeset 52592 in vbox for trunk/src/VBox/Installer


Ignore:
Timestamp:
Sep 3, 2014 8:23:24 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95866
Message:

NetFlt/win: NDIS6: fixes, enable disconnect interface, PM support for NetAdp6, installer helper functions

Location:
trunk/src/VBox/Installer/win/InstallHelper
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.cpp

    r52265 r52592  
    497497#define NETADP_ID  L"sun_VBoxNetAdp" /** @todo Needs to be changed (?). */
    498498
     499#define NETLWF_INF_NAME L"VBoxNetLwf.inf"
     500#define NETLWF_ID       L"sun_VBoxNetLwf" /** @todo Needs to be changed (?). */
     501#define NETADP6_ID      L"sun_VBoxNetAdp6" /** @todo Needs to be changed (?). */
     502
    499503static MSIHANDLE g_hCurrentModule = NULL;
    500504
     
    773777    return ERROR_SUCCESS;
    774778}
     779
     780
     781UINT __stdcall UninstallNetLwf(MSIHANDLE hModule)
     782{
     783#ifdef VBOX_WITH_NETFLT
     784    INetCfg *pNetCfg;
     785    UINT uErr;
     786
     787    netCfgLoggerEnable(hModule);
     788
     789    BOOL bOldIntMode = SetupSetNonInteractiveMode(FALSE);
     790
     791    __try
     792    {
     793        logStringW(hModule, L"Uninstalling NetLwf");
     794
     795        uErr = doNetCfgInit(hModule, &pNetCfg, TRUE);
     796        if (uErr == ERROR_SUCCESS)
     797        {
     798            HRESULT hr = VBoxNetCfgWinNetLwfUninstall(pNetCfg);
     799            if (hr != S_OK)
     800                logStringW(hModule, L"UninstallNetLwf: VBoxNetCfgWinUninstallComponent failed, error = 0x%x", hr);
     801
     802            uErr = errorConvertFromHResult(hModule, hr);
     803
     804            VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
     805
     806            logStringW(hModule, L"Uninstalling NetLwf done, error = 0x%x", uErr);
     807        }
     808        else
     809            logStringW(hModule, L"UninstallNetLwf: doNetCfgInit failed, error = 0x%x", uErr);
     810    }
     811    __finally
     812    {
     813        if (bOldIntMode)
     814        {
     815            /* The prev mode != FALSE, i.e. non-interactive. */
     816            SetupSetNonInteractiveMode(bOldIntMode);
     817        }
     818        netCfgLoggerDisable();
     819    }
     820#endif /* VBOX_WITH_NETFLT */
     821
     822    /* Never fail the install even if we did not succeed. */
     823    return ERROR_SUCCESS;
     824}
     825
     826UINT __stdcall InstallNetLwf(MSIHANDLE hModule)
     827{
     828#ifdef VBOX_WITH_NETFLT
     829    UINT uErr;
     830    INetCfg *pNetCfg;
     831
     832    netCfgLoggerEnable(hModule);
     833
     834    BOOL bOldIntMode = SetupSetNonInteractiveMode(FALSE);
     835
     836    __try
     837    {
     838
     839        logStringW(hModule, L"InstallNetLwf: Installing NetLwf");
     840
     841        uErr = doNetCfgInit(hModule, &pNetCfg, TRUE);
     842        if (uErr == ERROR_SUCCESS)
     843        {
     844            WCHAR wszInfName[] = L"VBoxNetLwf.inf";
     845            WCHAR wszInf[MAX_PATH];
     846            DWORD cchInf = RT_ELEMENTS(wszInf) - sizeof(NETLWF_INF_NAME) - 1;
     847            UINT uErr = MsiGetPropertyW(hModule, L"CustomActionData", wszInf, &cchInf);
     848            if (uErr == ERROR_SUCCESS)
     849            {
     850                if (cchInf)
     851                {
     852                    if (wszInf[cchInf - 1] != L'\\')
     853                    {
     854                        wszInf[cchInf++] = L'\\';
     855                        wszInf[cchInf]   = L'\0';
     856                    }
     857
     858                    wcscat(wszInf, NETLWF_INF_NAME);
     859
     860                    HRESULT hr = VBoxNetCfgWinNetLwfInstall(pNetCfg, wszInf);
     861                    if (FAILED(hr))
     862                        logStringW(hModule, L"InstallNetLwf: VBoxNetCfgWinNetLwfInstall failed, error = 0x%x", hr);
     863
     864                    uErr = errorConvertFromHResult(hModule, hr);
     865                }
     866                else
     867                {
     868                    logStringW(hModule, L"vboxNetFltQueryInfArray: Empty installation directory");
     869                    uErr = ERROR_GEN_FAILURE;
     870                }
     871            }
     872            else
     873                logStringW(hModule, L"vboxNetFltQueryInfArray: MsiGetPropertyW failed, error = 0x%x", uErr);
     874
     875            VBoxNetCfgWinReleaseINetCfg(pNetCfg, TRUE);
     876
     877            logStringW(hModule, L"InstallNetLwf: Done");
     878        }
     879        else
     880            logStringW(hModule, L"InstallNetLwf: doNetCfgInit failed, error = 0x%x", uErr);
     881    }
     882    __finally
     883    {
     884        if (bOldIntMode)
     885        {
     886            /* The prev mode != FALSE, i.e. non-interactive. */
     887            SetupSetNonInteractiveMode(bOldIntMode);
     888        }
     889        netCfgLoggerDisable();
     890    }
     891#endif /* VBOX_WITH_NETFLT */
     892
     893    /* Never fail the install even if we did not succeed. */
     894    return ERROR_SUCCESS;
     895}
     896
    775897
    776898#if 0
     
    832954#endif
    833955
    834 UINT __stdcall CreateHostOnlyInterface(MSIHANDLE hModule)
     956static UINT _createHostOnlyInterface(MSIHANDLE hModule, LPCWSTR pwszId, LPCWSTR pwszInfName)
    835957{
    836958#ifdef VBOX_WITH_NETFLT
     
    846968    GUID guid;
    847969    WCHAR wszMpInf[MAX_PATH];
    848     DWORD cchMpInf = RT_ELEMENTS(wszMpInf) - sizeof("VBoxNetAdp.inf") - 1;
     970    DWORD cchMpInf = RT_ELEMENTS(wszMpInf) - wcslen(pwszInfName) - 1 - 1;
    849971    LPCWSTR pwszInfPath = NULL;
    850972    bool bIsFile = false;
     
    861983            }
    862984
    863             wcscat(wszMpInf, L"VBoxNetAdp.inf");
     985            wcscat(wszMpInf, pwszInfName);
    864986            pwszInfPath = wszMpInf;
    865987            bIsFile = true;
     
    8871009    //first, try to update Host Only Network Interface
    8881010        BOOL fRebootRequired = FALSE;
    889         hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(pwszInfPath, &fRebootRequired);
     1011        hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(pwszInfPath, &fRebootRequired, pwszId);
    8901012        if (SUCCEEDED(hr))
    8911013        {
     
    9381060}
    9391061
    940 UINT __stdcall RemoveHostOnlyInterfaces(MSIHANDLE hModule)
     1062UINT __stdcall CreateHostOnlyInterface(MSIHANDLE hModule)
     1063{
     1064    return _createHostOnlyInterface(hModule, NETADP_ID, L"VBoxNetAdp.inf");
     1065}
     1066
     1067UINT __stdcall Ndis6CreateHostOnlyInterface(MSIHANDLE hModule)
     1068{
     1069    return _createHostOnlyInterface(hModule, NETADP6_ID, L"VBoxNetAdp6.inf");
     1070}
     1071
     1072
     1073static UINT _removeHostOnlyInterfaces(MSIHANDLE hModule, LPCWSTR pwszId)
    9411074{
    9421075#ifdef VBOX_WITH_NETFLT
     
    9471080    BOOL bSetupModeInteractive = SetupSetNonInteractiveMode(FALSE);
    9481081
    949     HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(NETADP_ID);
     1082    HRESULT hr = VBoxNetCfgWinRemoveAllNetDevicesOfId(pwszId);
    9501083    if (SUCCEEDED(hr))
    9511084    {
    952         hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, NETADP_ID, L"Net", 0/* could be SUOI_FORCEDELETE */);
     1085        hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, pwszId, L"Net", 0/* could be SUOI_FORCEDELETE */);
    9531086        if (FAILED(hr))
    9541087        {
     
    9701103}
    9711104
    972 UINT __stdcall StopHostOnlyInterfaces(MSIHANDLE hModule)
     1105UINT __stdcall RemoveHostOnlyInterfaces(MSIHANDLE hModule)
     1106{
     1107    return _removeHostOnlyInterfaces(hModule, NETADP_ID);
     1108}
     1109
     1110UINT __stdcall Ndis6RemoveHostOnlyInterfaces(MSIHANDLE hModule)
     1111{
     1112    return _removeHostOnlyInterfaces(hModule, NETADP6_ID);
     1113}
     1114
     1115
     1116
     1117static UINT _stopHostOnlyInterfaces(MSIHANDLE hModule, LPCWSTR pwszId)
    9731118{
    9741119#ifdef VBOX_WITH_NETFLT
     
    9791124    BOOL bSetupModeInteractive = SetupSetNonInteractiveMode(FALSE);
    9801125
    981     HRESULT hr = VBoxNetCfgWinPropChangeAllNetDevicesOfId(NETADP_ID, VBOXNECTFGWINPROPCHANGE_TYPE_DISABLE);
     1126    HRESULT hr = VBoxNetCfgWinPropChangeAllNetDevicesOfId(pwszId, VBOXNECTFGWINPROPCHANGE_TYPE_DISABLE);
    9821127    if (SUCCEEDED(hr))
    9831128    {
    984         hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, NETADP_ID, L"Net", 0/* could be SUOI_FORCEDELETE */);
     1129        hr = VBoxDrvCfgInfUninstallAllSetupDi(&GUID_DEVCLASS_NET, pwszId, L"Net", 0/* could be SUOI_FORCEDELETE */);
    9851130        if (FAILED(hr))
    9861131            logStringW(hModule, L"StopHostOnlyInterfaces: VBoxDrvCfgInfUninstallAllSetupDi failed, hr = 0x%x", hr);
     
    10001145}
    10011146
    1002 UINT __stdcall UpdateHostOnlyInterfaces(MSIHANDLE hModule)
     1147UINT __stdcall StopHostOnlyInterfaces(MSIHANDLE hModule)
     1148{
     1149    return _stopHostOnlyInterfaces(hModule, NETADP_ID);
     1150}
     1151
     1152UINT __stdcall Ndis6StopHostOnlyInterfaces(MSIHANDLE hModule)
     1153{
     1154    return _stopHostOnlyInterfaces(hModule, NETADP6_ID);
     1155}
     1156
     1157static UINT _updateHostOnlyInterfaces(MSIHANDLE hModule, LPCWSTR pwszInfName, LPCWSTR pwszId)
    10031158{
    10041159#ifdef VBOX_WITH_NETFLT
     
    10101165
    10111166    WCHAR wszMpInf[MAX_PATH];
    1012     DWORD cchMpInf = RT_ELEMENTS(wszMpInf) - sizeof("VBoxNetAdp.inf") - 1;
     1167    DWORD cchMpInf = RT_ELEMENTS(wszMpInf) - wcslen(pwszInfName) - 1 - 1;
    10131168    LPCWSTR pwszInfPath = NULL;
    10141169    bool bIsFile = false;
     
    10251180            }
    10261181
    1027             wcscat(wszMpInf, L"VBoxNetAdp.inf");
     1182            wcscat(wszMpInf, pwszInfName);
    10281183            pwszInfPath = wszMpInf;
    10291184            bIsFile = true;
     
    10441199
    10451200                BOOL fRebootRequired = FALSE;
    1046                 HRESULT hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(pwszInfPath, &fRebootRequired);
     1201                HRESULT hr = VBoxNetCfgWinUpdateHostOnlyNetworkInterface(pwszInfPath, &fRebootRequired, pwszId);
    10471202                if (SUCCEEDED(hr))
    10481203                {
     
    10741229    /* Never fail the install even if we did not succeed. */
    10751230    return ERROR_SUCCESS;
     1231}
     1232
     1233UINT __stdcall UpdateHostOnlyInterfaces(MSIHANDLE hModule)
     1234{
     1235    return _updateHostOnlyInterfaces(hModule, L"VBoxNetAdp.inf", NETADP_ID);
     1236}
     1237
     1238UINT __stdcall Ndis6UpdateHostOnlyInterfaces(MSIHANDLE hModule)
     1239{
     1240    return _updateHostOnlyInterfaces(hModule, L"VBoxNetAdp6.inf", NETADP6_ID);
    10761241}
    10771242
  • trunk/src/VBox/Installer/win/InstallHelper/VBoxInstallHelper.def

    r40997 r52592  
    2525    InstallNetFlt
    2626    UninstallNetFlt
     27    InstallNetLwf
     28    UninstallNetLwf
    2729    UninstallTAPInstances
    2830    CreateHostOnlyInterface
     
    3032    UpdateHostOnlyInterfaces
    3133    RemoveHostOnlyInterfaces
     34    Ndis6CreateHostOnlyInterface
     35    Ndis6StopHostOnlyInterfaces
     36    Ndis6UpdateHostOnlyInterfaces
     37    Ndis6RemoveHostOnlyInterfaces
    3238
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