From: Jason A. Donenfeld Date: Fri, 22 Mar 2019 22:48:40 +0000 (-0600) Subject: wintun: query for NetCfgInstanceId several times X-Git-Tag: 0.0.20190409~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2fa80c0cb7453ab830355b4c612192ec3064865c;p=thirdparty%2Fwireguard-go.git wintun: query for NetCfgInstanceId several times --- diff --git a/tun/wintun/wintun_windows.go b/tun/wintun/wintun_windows.go index f2f3684..ba94b11 100644 --- a/tun/wintun/wintun_windows.go +++ b/tun/wintun/wintun_windows.go @@ -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)