wintun: calculate path of NDIS device object symbolic link

This commit is contained in:
Jason A. Donenfeld 2019-07-18 10:25:12 +02:00
parent 4d5819183e
commit 298d759f3e

View file

@ -311,6 +311,9 @@ func CreateInterface(description string, requestedGUID *windows.GUID) (wintun *W
waitForRegistryTimeout) waitForRegistryTimeout)
if err == nil { if err == nil {
_, err = registryEx.GetStringValueWait(key, "Name", waitForRegistryTimeout) _, err = registryEx.GetStringValueWait(key, "Name", waitForRegistryTimeout)
if err == nil {
_, err = registryEx.GetStringValueWait(key, "PnPInstanceId", waitForRegistryTimeout)
}
key.Close() key.Close()
} }
} }
@ -614,6 +617,23 @@ func (wintun *Wintun) DataFileName() string {
return fmt.Sprintf("\\\\.\\Global\\WINTUN%d", wintun.luidIndex) 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. // GUID returns the GUID of the interface.
func (wintun *Wintun) GUID() windows.GUID { func (wintun *Wintun) GUID() windows.GUID {
return wintun.cfgInstanceID return wintun.cfgInstanceID