diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-06-09 17:22:59 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2019-06-10 10:43:01 +0200 |
commit | bb3f1932faa4f75800a145e7f0476d8a8dcf104a (patch) | |
tree | 9f95a25d93817d8d0df62849fdb6ee7e6d125b9e /tun/wintun/setupapi/setupapi_windows.go | |
parent | eaf17becfa70c31bcfb6f195e8d68cb5b720ec4a (diff) | |
download | wireguard-go-bb3f1932faa4f75800a145e7f0476d8a8dcf104a.tar.gz wireguard-go-bb3f1932faa4f75800a145e7f0476d8a8dcf104a.zip |
setupapi: add DeviceInstanceID()
Diffstat (limited to '')
-rw-r--r-- | tun/wintun/setupapi/setupapi_windows.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tun/wintun/setupapi/setupapi_windows.go b/tun/wintun/setupapi/setupapi_windows.go index 1ac1419..6757743 100644 --- a/tun/wintun/setupapi/setupapi_windows.go +++ b/tun/wintun/setupapi/setupapi_windows.go @@ -364,6 +364,29 @@ func (deviceInfoSet DevInfo) DeviceInstallParams(deviceInfoData *DevInfoData) (* return SetupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData) } +//sys setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) = setupapi.SetupDiGetDeviceInstanceIdW + +// SetupDiGetDeviceInstanceId function retrieves the instance ID of the device +func SetupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (string, error) { + reqSize := uint32(1024) + for { + buf := make([]uint16, reqSize) + err := setupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData, &buf[0], uint32(len(buf)), &reqSize) + if err == windows.ERROR_INSUFFICIENT_BUFFER { + continue + } + if err != nil { + return "", err + } + return windows.UTF16ToString(buf), nil + } +} + +// DeviceInstanceID method retrieves the instance ID of the device. +func (deviceInfoSet DevInfo) DeviceInstanceID(deviceInfoData *DevInfoData) (string, error) { + return SetupDiGetDeviceInstanceId(deviceInfoSet, deviceInfoData) +} + // SetupDiGetClassInstallParams function retrieves class installation parameters for a device information set or a particular device information element. //sys SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) = setupapi.SetupDiGetClassInstallParamsW |