]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
wintun: query for NetCfgInstanceId several times
authorJason A. Donenfeld <Jason@zx2c4.com>
Fri, 22 Mar 2019 22:48:40 +0000 (16:48 -0600)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 22 Mar 2019 22:48:40 +0000 (16:48 -0600)
tun/wintun/wintun_windows.go

index f2f3684cd869a43e6ec1e0b441f6a584832ecd01..ba94b11da1ee7ec170b67729660c96f3ed11ef36 100644 (file)
@@ -45,14 +45,25 @@ func MakeWintun(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.DevInfo
        }
        defer key.Close()
 
-       // Read the NetCfgInstanceId value.
-       valueStr, valueType, err := key.GetStringValue("NetCfgInstanceId")
+       var valueStr string
+       var valueType uint32
+
+       //TODO: Figure out a way to not need to loop like this.
+       for i := 0; i < 30; i++ {
+               // Read the NetCfgInstanceId value.
+               valueStr, valueType, err = key.GetStringValue("NetCfgInstanceId")
+               if err != nil {
+                       time.Sleep(time.Millisecond * 100)
+                       continue
+               }
+               if valueType != registry.SZ {
+                       return nil, fmt.Errorf("NetCfgInstanceId registry value is not REG_SZ (expected: %v, provided: %v)", registry.SZ, valueType)
+               }
+               break
+       }
        if err != nil {
                return nil, errors.New("RegQueryStringValue(\"NetCfgInstanceId\") failed: " + err.Error())
        }
-       if valueType != registry.SZ {
-               return nil, fmt.Errorf("NetCfgInstanceId registry value is not REG_SZ (expected: %v, provided: %v)", registry.SZ, valueType)
-       }
 
        // Convert to windows.GUID.
        ifid, err := guid.FromString(valueStr)