devInstanceID string
luidIndex uint32
ifType uint32
+ pool Pool
}
var deviceClassNetGUID = windows.GUID{Data1: 0x4d36e972, Data2: 0xe325, Data3: 0x11ce, Data4: [8]byte{0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}}
)
// makeWintun creates a Wintun interface handle and populates it from the device's registry key.
-func makeWintun(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.DevInfoData) (*Wintun, error) {
+func makeWintun(deviceInfoSet setupapi.DevInfo, deviceInfoData *setupapi.DevInfoData, pool Pool) (*Wintun, error) {
// Open HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\<class>\<id> registry key.
key, err := deviceInfoSet.OpenDevRegKey(deviceInfoData, setupapi.DICS_FLAG_GLOBAL, 0, setupapi.DIREG_DRV, registry.QUERY_VALUE)
if err != nil {
devInstanceID: instanceID,
luidIndex: uint32(luidIdx),
ifType: uint32(ifType),
+ pool: pool,
}, nil
}
continue
}
- wintun, err := makeWintun(devInfoList, deviceData)
+ wintun, err := makeWintun(devInfoList, deviceData, pool)
if err != nil {
continue
}
}
// Get network interface.
- wintun, err = makeWintun(devInfoList, deviceData)
+ wintun, err = makeWintun(devInfoList, deviceData, pool)
if err != nil {
err = fmt.Errorf("makeWintun failed: %v", err)
return
continue
}
- wintun, err := makeWintun(devInfoList, deviceData)
+ wintun, err := makeWintun(devInfoList, deviceData, pool)
if err != nil {
errors = append(errors, fmt.Errorf("makeWintun failed: %v", err))
continue
}
// SetInterfaceName sets name of the Wintun interface.
-func (wintun *Wintun) SetInterfaceName(ifname string, pool Pool) error {
+func (wintun *Wintun) SetInterfaceName(ifname string) error {
const maxSuffix = 1000
availableIfname := ifname
for i := 0; ; i++ {
return fmt.Errorf("Device-level registry key open failed: %v", err)
}
defer deviceRegKey.Close()
- err = deviceRegKey.SetStringValue("FriendlyName", pool.DeviceTypeName())
+ err = deviceRegKey.SetStringValue("FriendlyName", wintun.pool.DeviceTypeName())
if err != nil {
return fmt.Errorf("SetStringValue(FriendlyName) failed: %v", err)
}
// Get interface ID.
// TODO: Store some ID in the Wintun object such that this call isn't required.
- wintun2, err := makeWintun(devInfoList, deviceData)
+ wintun2, err := makeWintun(devInfoList, deviceData, wintun.pool)
if err != nil {
continue
}