summaryrefslogtreecommitdiffhomepage
path: root/tun/wintun
diff options
context:
space:
mode:
Diffstat (limited to 'tun/wintun')
-rw-r--r--tun/wintun/wintun_windows.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/tun/wintun/wintun_windows.go b/tun/wintun/wintun_windows.go
index e6dc141..a49242f 100644
--- a/tun/wintun/wintun_windows.go
+++ b/tun/wintun/wintun_windows.go
@@ -131,6 +131,15 @@ func (pool Pool) GetInterface(ifname string) (*Interface, error) {
continue
}
+ // Check the Hardware ID to make sure it's a real Wintun device first. This avoids doing slow operations on non-Wintun devices.
+ property, err := devInfoList.DeviceRegistryProperty(deviceData, setupapi.SPDRP_HARDWAREID)
+ if err != nil {
+ continue
+ }
+ if hwids, ok := property.([]string); ok && len(hwids) > 0 && hwids[0] != hardwareID {
+ continue
+ }
+
wintun, err := makeWintun(devInfoList, deviceData, pool)
if err != nil {
continue
@@ -494,6 +503,15 @@ func (pool Pool) DeleteMatchingInterfaces(matches func(wintun *Interface) bool)
continue
}
+ // Check the Hardware ID to make sure it's a real Wintun device first. This avoids doing slow operations on non-Wintun devices.
+ property, err := devInfoList.DeviceRegistryProperty(deviceData, setupapi.SPDRP_HARDWAREID)
+ if err != nil {
+ continue
+ }
+ if hwids, ok := property.([]string); ok && len(hwids) > 0 && hwids[0] != hardwareID {
+ continue
+ }
+
err = devInfoList.BuildDriverInfoList(deviceData, setupapi.SPDIT_COMPATDRIVER)
if err != nil {
continue