|
@@ -789,7 +789,29 @@ void WindowsEthernetTap::destroyAllPersistentTapDevices(const char *pathToHelper
|
|
|
}
|
|
|
|
|
|
for(std::set<std::string>::iterator iidp(instanceIdPathsToRemove.begin());iidp!=instanceIdPathsToRemove.end();++iidp)
|
|
|
- _deletePersistentTapDevice(pathToHelpers,iidp->c_str());
|
|
|
+ deletePersistentTapDevice(pathToHelpers,iidp->c_str());
|
|
|
+}
|
|
|
+
|
|
|
+void WindowsEthernetTap::deletePersistentTapDevice(const char *pathToHelpers,const char *instanceId)
|
|
|
+{
|
|
|
+ HANDLE devconLog = CreateFileA((std::string(pathToHelpers) + "\\devcon.log").c_str(),GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
|
|
|
+ STARTUPINFOA startupInfo;
|
|
|
+ startupInfo.cb = sizeof(startupInfo);
|
|
|
+ if (devconLog != INVALID_HANDLE_VALUE) {
|
|
|
+ SetFilePointer(devconLog,0,0,FILE_END);
|
|
|
+ startupInfo.hStdOutput = devconLog;
|
|
|
+ startupInfo.hStdError = devconLog;
|
|
|
+ }
|
|
|
+ PROCESS_INFORMATION processInfo;
|
|
|
+ memset(&startupInfo,0,sizeof(STARTUPINFOA));
|
|
|
+ memset(&processInfo,0,sizeof(PROCESS_INFORMATION));
|
|
|
+ if (CreateProcessA(NULL,(LPSTR)(std::string("\"") + pathToHelpers + WINENV.devcon + "\" remove @" + instanceId).c_str(),NULL,NULL,FALSE,0,NULL,NULL,&startupInfo,&processInfo)) {
|
|
|
+ WaitForSingleObject(processInfo.hProcess,INFINITE);
|
|
|
+ CloseHandle(processInfo.hProcess);
|
|
|
+ CloseHandle(processInfo.hThread);
|
|
|
+ }
|
|
|
+ if (devconLog != INVALID_HANDLE_VALUE)
|
|
|
+ CloseHandle(devconLog);
|
|
|
}
|
|
|
|
|
|
bool WindowsEthernetTap::_disableTapDevice()
|
|
@@ -922,26 +944,4 @@ void WindowsEthernetTap::_setRegistryIPv4Value(const char *regKey,const std::vec
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void WindowsEthernetTap::_deletePersistentTapDevice(const char *pathToHelpers,const char *instanceId)
|
|
|
-{
|
|
|
- HANDLE devconLog = CreateFileA((std::string(pathToHelpers) + "\\devcon.log").c_str(),GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
|
|
|
- STARTUPINFOA startupInfo;
|
|
|
- startupInfo.cb = sizeof(startupInfo);
|
|
|
- if (devconLog != INVALID_HANDLE_VALUE) {
|
|
|
- SetFilePointer(devconLog,0,0,FILE_END);
|
|
|
- startupInfo.hStdOutput = devconLog;
|
|
|
- startupInfo.hStdError = devconLog;
|
|
|
- }
|
|
|
- PROCESS_INFORMATION processInfo;
|
|
|
- memset(&startupInfo,0,sizeof(STARTUPINFOA));
|
|
|
- memset(&processInfo,0,sizeof(PROCESS_INFORMATION));
|
|
|
- if (CreateProcessA(NULL,(LPSTR)(std::string("\"") + pathToHelpers + WINENV.devcon + "\" remove @" + instanceId).c_str(),NULL,NULL,FALSE,0,NULL,NULL,&startupInfo,&processInfo)) {
|
|
|
- WaitForSingleObject(processInfo.hProcess,INFINITE);
|
|
|
- CloseHandle(processInfo.hProcess);
|
|
|
- CloseHandle(processInfo.hThread);
|
|
|
- }
|
|
|
- if (devconLog != INVALID_HANDLE_VALUE)
|
|
|
- CloseHandle(devconLog);
|
|
|
-}
|
|
|
-
|
|
|
} // namespace ZeroTier
|