aboutsummaryrefslogtreecommitdiffstats
path: root/tun/wintun/registryhacks_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'tun/wintun/registryhacks_windows.go')
-rw-r--r--tun/wintun/registryhacks_windows.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/tun/wintun/registryhacks_windows.go b/tun/wintun/registryhacks_windows.go
new file mode 100644
index 0000000..62a629a
--- /dev/null
+++ b/tun/wintun/registryhacks_windows.go
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2019 WireGuard LLC. All Rights Reserved.
+ */
+
+package wintun
+
+import (
+ "golang.org/x/sys/windows/registry"
+ "time"
+)
+
+const (
+ numRetries = 25
+ retryTimeout = 100 * time.Millisecond
+)
+
+func registryOpenKeyRetry(k registry.Key, path string, access uint32) (key registry.Key, err error) {
+ for i := 0; i < numRetries; i++ {
+ key, err = registry.OpenKey(k, path, access)
+ if err == nil {
+ break
+ }
+ if i != numRetries - 1 {
+ time.Sleep(retryTimeout)
+ }
+ }
+ return
+}
+
+func keyGetStringValueRetry(k registry.Key, name string) (val string, valtype uint32, err error) {
+ for i := 0; i < numRetries; i++ {
+ val, valtype, err = k.GetStringValue(name)
+ if err == nil {
+ break
+ }
+ if i != numRetries - 1 {
+ time.Sleep(retryTimeout)
+ }
+ }
+ return
+}