wintun: cleanup earlier
This commit is contained in:
		
							parent
							
								
									7fbb24afaa
								
							
						
					
					
						commit
						26fb615b11
					
				
					 1 changed files with 20 additions and 19 deletions
				
			
		|  | @ -257,6 +257,26 @@ func CreateInterface(requestedGUID *windows.GUID) (wintun *Wintun, rebootRequire | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	defer func() { | ||||||
|  | 		if err != nil { | ||||||
|  | 			// The interface failed to install, or the interface ID was unobtainable. Clean-up.
 | ||||||
|  | 			removeDeviceParams := setupapi.RemoveDeviceParams{ | ||||||
|  | 				ClassInstallHeader: *setupapi.MakeClassInstallHeader(setupapi.DIF_REMOVE), | ||||||
|  | 				Scope:              setupapi.DI_REMOVEDEVICE_GLOBAL, | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			// Set class installer parameters for DIF_REMOVE.
 | ||||||
|  | 			if devInfoList.SetClassInstallParams(deviceData, &removeDeviceParams.ClassInstallHeader, uint32(unsafe.Sizeof(removeDeviceParams))) == nil { | ||||||
|  | 				// Call appropriate class installer.
 | ||||||
|  | 				if devInfoList.CallClassInstaller(setupapi.DIF_REMOVE, deviceData) == nil { | ||||||
|  | 					rebootRequired = rebootRequired || checkReboot(devInfoList, deviceData) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			wintun = nil | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
| 	// Call appropriate class installer.
 | 	// Call appropriate class installer.
 | ||||||
| 	err = devInfoList.CallClassInstaller(setupapi.DIF_REGISTERDEVICE, deviceData) | 	err = devInfoList.CallClassInstaller(setupapi.DIF_REGISTERDEVICE, deviceData) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|  | @ -293,25 +313,6 @@ func CreateInterface(requestedGUID *windows.GUID) (wintun *Wintun, rebootRequire | ||||||
| 
 | 
 | ||||||
| 	// Install interfaces if any. (Ignore errors)
 | 	// Install interfaces if any. (Ignore errors)
 | ||||||
| 	devInfoList.CallClassInstaller(setupapi.DIF_INSTALLINTERFACES, deviceData) | 	devInfoList.CallClassInstaller(setupapi.DIF_INSTALLINTERFACES, deviceData) | ||||||
| 	defer func() { |  | ||||||
| 		if err != nil { |  | ||||||
| 			// The interface failed to install, or the interface ID was unobtainable. Clean-up.
 |  | ||||||
| 			removeDeviceParams := setupapi.RemoveDeviceParams{ |  | ||||||
| 				ClassInstallHeader: *setupapi.MakeClassInstallHeader(setupapi.DIF_REMOVE), |  | ||||||
| 				Scope:              setupapi.DI_REMOVEDEVICE_GLOBAL, |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			// Set class installer parameters for DIF_REMOVE.
 |  | ||||||
| 			if devInfoList.SetClassInstallParams(deviceData, &removeDeviceParams.ClassInstallHeader, uint32(unsafe.Sizeof(removeDeviceParams))) == nil { |  | ||||||
| 				// Call appropriate class installer.
 |  | ||||||
| 				if devInfoList.CallClassInstaller(setupapi.DIF_REMOVE, deviceData) == nil { |  | ||||||
| 					rebootRequired = rebootRequired || checkReboot(devInfoList, deviceData) |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			wintun = nil |  | ||||||
| 		} |  | ||||||
| 	}() |  | ||||||
| 
 | 
 | ||||||
| 	// Install the device.
 | 	// Install the device.
 | ||||||
| 	err = devInfoList.CallClassInstaller(setupapi.DIF_INSTALLDEVICE, deviceData) | 	err = devInfoList.CallClassInstaller(setupapi.DIF_INSTALLDEVICE, deviceData) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue