/* $Id: VBoxNetFltUninstall.cpp 62490 2016-07-22 18:41:49Z vboxsync $ */ /** @file * NetFltUninstall - VBoxNetFlt uninstaller command line tool */ /* * Copyright (C) 2008-2016 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; * you can redistribute it and/or modify it under the terms of the GNU * General Public License (GPL) as published by the Free Software * Foundation, in version 2 as it comes in the "COPYING" file of the * VirtualBox OSE distribution. VirtualBox OSE is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. */ #include #include #define NETFLT_ID L"sun_VBoxNetFlt" #define VBOX_NETCFG_APP_NAME L"NetFltUninstall" #define VBOX_NETFLT_PT_INF L".\\VBoxNetFlt.inf" #define VBOX_NETFLT_MP_INF L".\\VBoxNetFltM.inf" #define VBOX_NETFLT_RETRIES 10 static VOID winNetCfgLogger (LPCSTR szString) { printf("%s", szString); } static int VBoxNetFltUninstall() { INetCfg *pnc; LPWSTR lpszLockedBy = NULL; int r; VBoxNetCfgWinSetLogging(winNetCfgLogger); HRESULT hr = CoInitialize(NULL); if (hr == S_OK) { int i = 0; do { hr = VBoxNetCfgWinQueryINetCfg(&pnc, TRUE, VBOX_NETCFG_APP_NAME, 10000, &lpszLockedBy); if (hr == S_OK) { hr = VBoxNetCfgWinNetFltUninstall(pnc); if (hr != S_OK && hr != S_FALSE) { wprintf(L"error uninstalling VBoxNetFlt (0x%x)\n", hr); r = 1; } else { wprintf(L"uninstalled successfully\n"); r = 0; } VBoxNetCfgWinReleaseINetCfg(pnc, TRUE); break; } else if (hr == NETCFG_E_NO_WRITE_LOCK && lpszLockedBy) { if (i < VBOX_NETFLT_RETRIES && !wcscmp(lpszLockedBy, L"6to4svc.dll")) { wprintf(L"6to4svc.dll is holding the lock, retrying %d out of %d\n", ++i, VBOX_NETFLT_RETRIES); CoTaskMemFree(lpszLockedBy); } else { wprintf(L"Error: write lock is owned by another application (%s), close the application and retry uninstalling\n", lpszLockedBy); r = 1; CoTaskMemFree(lpszLockedBy); break; } } else { wprintf(L"Error getting the INetCfg interface (0x%x)\n", hr); r = 1; break; } } while (true); CoUninitialize(); } else { wprintf(L"Error initializing COM (0x%x)\n", hr); r = 1; } VBoxNetCfgWinSetLogging(NULL); return r; } int __cdecl main(int argc, char **argv) { return VBoxNetFltUninstall(); }