]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
wintun: calculate path of NDIS device object symbolic link
authorJason A. Donenfeld <Jason@zx2c4.com>
Thu, 18 Jul 2019 08:25:12 +0000 (10:25 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Thu, 18 Jul 2019 08:25:20 +0000 (10:25 +0200)
tun/wintun/wintun_windows.go

index b8aabf39159d25b246d5632da514120a2941baf1..160d51f80c0cef5c08a85544b3cbba43b43580f9 100644 (file)
@@ -311,6 +311,9 @@ func CreateInterface(description string, requestedGUID *windows.GUID) (wintun *W
                        waitForRegistryTimeout)
                if err == nil {
                        _, err = registryEx.GetStringValueWait(key, "Name", waitForRegistryTimeout)
+                       if err == nil {
+                               _, err = registryEx.GetStringValueWait(key, "PnPInstanceId", waitForRegistryTimeout)
+                       }
                        key.Close()
                }
        }
@@ -614,6 +617,23 @@ func (wintun *Wintun) DataFileName() string {
        return fmt.Sprintf("\\\\.\\Global\\WINTUN%d", wintun.luidIndex)
 }
 
+// NdisFileName returns the Wintun NDIS device object name.
+func (wintun *Wintun) NdisFileName() (string, error) {
+       key, err := registry.OpenKey(registry.LOCAL_MACHINE, wintun.netRegKeyName(), registry.QUERY_VALUE)
+       if err != nil {
+               return "", fmt.Errorf("Network-specific registry key open failed: %v", err)
+       }
+       defer key.Close()
+
+       // Get the interface name.
+       pnpInstanceID, err := registryEx.GetStringValue(key, "PnPInstanceId")
+       if err != nil {
+               return "", fmt.Errorf("PnpInstanceId registry key read failed: %v", err)
+       }
+       mangledPnpNode := strings.ReplaceAll(fmt.Sprintf("%s\\{cac88484-7515-4c03-82e6-71a87abac361}", pnpInstanceID), "\\", "#")
+       return fmt.Sprintf("\\\\.\\Global\\%s", mangledPnpNode), nil
+}
+
 // GUID returns the GUID of the interface.
 func (wintun *Wintun) GUID() windows.GUID {
        return wintun.cfgInstanceID