From bd963497da908d3910668dab9dab4ac7654a638a Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Thu, 7 Feb 2019 22:35:03 +0100 Subject: setupapi: Merge _SP_DEVINSTALL_PARAMS and DevInstallParams Signed-off-by: Simon Rozman --- tun/wintun/setupapi/setupapi_windows.go | 27 ++++----------- tun/wintun/setupapi/setupapi_windows_test.go | 6 ++++ tun/wintun/setupapi/types_windows.go | 51 ++++++---------------------- tun/wintun/setupapi/zsetupapi_windows.go | 4 +-- 4 files changed, 25 insertions(+), 63 deletions(-) diff --git a/tun/wintun/setupapi/setupapi_windows.go b/tun/wintun/setupapi/setupapi_windows.go index d195ba4..ca944f1 100644 --- a/tun/wintun/setupapi/setupapi_windows.go +++ b/tun/wintun/setupapi/setupapi_windows.go @@ -332,19 +332,14 @@ func (deviceInfoSet DevInfo) SetDeviceRegistryProperty(deviceInfoData *DevInfoDa return SetupDiSetDeviceRegistryProperty(deviceInfoSet, deviceInfoData, property, propertyBuffers) } -//sys setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *_SP_DEVINSTALL_PARAMS) (err error) = setupapi.SetupDiGetDeviceInstallParamsW +//sys setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiGetDeviceInstallParamsW // SetupDiGetDeviceInstallParams function retrieves device installation parameters for a device information set or a particular device information element. -func SetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (deviceInstallParams *DevInstallParams, err error) { - var _data _SP_DEVINSTALL_PARAMS - _data.Size = uint32(unsafe.Sizeof(_data)) +func SetupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (*DevInstallParams, error) { + params := &DevInstallParams{} + params.size = uint32(unsafe.Sizeof(*params)) - err = setupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData, &_data) - if err != nil { - return - } - - return _data.toGo(), nil + return params, setupDiGetDeviceInstallParams(deviceInfoSet, deviceInfoData, params) } // GetDeviceInstallParams method retrieves device installation parameters for a device information set or a particular device information element. @@ -360,17 +355,7 @@ func (deviceInfoSet DevInfo) GetClassInstallParams(deviceInfoData *DevInfoData, return SetupDiGetClassInstallParams(deviceInfoSet, deviceInfoData, classInstallParams, classInstallParamsSize, requiredSize) } -//sys setupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *_SP_DEVINSTALL_PARAMS) (err error) = setupapi.SetupDiSetDeviceInstallParamsW - -// SetupDiSetDeviceInstallParams function sets device installation parameters for a device information set or a particular device information element. -func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { - _data, err := deviceInstallParams.toWindows() - if err != nil { - return - } - - return setupDiSetDeviceInstallParams(deviceInfoSet, deviceInfoData, _data) -} +//sys SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) = setupapi.SetupDiSetDeviceInstallParamsW // SetDeviceInstallParams member sets device installation parameters for a device information set or a particular device information element. func (deviceInfoSet DevInfo) SetDeviceInstallParams(deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) error { diff --git a/tun/wintun/setupapi/setupapi_windows_test.go b/tun/wintun/setupapi/setupapi_windows_test.go index b8f4bc7..32e0f1e 100644 --- a/tun/wintun/setupapi/setupapi_windows_test.go +++ b/tun/wintun/setupapi/setupapi_windows_test.go @@ -361,6 +361,12 @@ func TestSetupDiGetDeviceInstallParams(t *testing.T) { t.Errorf("Error calling SetupDiGetDeviceInstallParams: %s", err.Error()) } } + + params := &DevInstallParams{} + params.SetDriverPath("foobar") + if params.GetDriverPath() != "foobar" { + t.Error("DevInstallParams.(Get|Set)DriverPath() differ") + } } func TestSetupDiClassNameFromGuidEx(t *testing.T) { diff --git a/tun/wintun/setupapi/types_windows.go b/tun/wintun/setupapi/types_windows.go index a37fdec..ae60bd0 100644 --- a/tun/wintun/setupapi/types_windows.go +++ b/tun/wintun/setupapi/types_windows.go @@ -123,8 +123,9 @@ const ( DIF_FINISHINSTALL_ACTION DI_FUNCTION = 0x0000002A ) -type _SP_DEVINSTALL_PARAMS struct { - Size uint32 +// DevInstallParams is device installation parameters structure (associated with a particular device information element, or globally with a device information set) +type DevInstallParams struct { + size uint32 Flags DI_FLAGS FlagsEx DI_FLAGSEX hwndParent uintptr @@ -133,50 +134,20 @@ type _SP_DEVINSTALL_PARAMS struct { FileQueue HSPFILEQ _ uintptr _ uint32 - DriverPath [windows.MAX_PATH]uint16 -} - -func (_data *_SP_DEVINSTALL_PARAMS) toGo() *DevInstallParams { - return &DevInstallParams{ - Flags: _data.Flags, - FlagsEx: _data.FlagsEx, - hwndParent: _data.hwndParent, - InstallMsgHandler: _data.InstallMsgHandler, - InstallMsgHandlerContext: _data.InstallMsgHandlerContext, - FileQueue: _data.FileQueue, - DriverPath: windows.UTF16ToString(_data.DriverPath[:]), - } + driverPath [windows.MAX_PATH]uint16 } -// DevInstallParams is device installation parameters structure (associated with a particular device information element, or globally with a device information set) -type DevInstallParams struct { - Flags DI_FLAGS - FlagsEx DI_FLAGSEX - hwndParent uintptr - InstallMsgHandler uintptr - InstallMsgHandlerContext uintptr - FileQueue HSPFILEQ - DriverPath string +func (params *DevInstallParams) GetDriverPath() string { + return windows.UTF16ToString(params.driverPath[:]) } -func (DeviceInstallParams *DevInstallParams) toWindows() (_data *_SP_DEVINSTALL_PARAMS, err error) { - _data = &_SP_DEVINSTALL_PARAMS{ - Flags: DeviceInstallParams.Flags, - FlagsEx: DeviceInstallParams.FlagsEx, - hwndParent: DeviceInstallParams.hwndParent, - InstallMsgHandler: DeviceInstallParams.InstallMsgHandler, - InstallMsgHandlerContext: DeviceInstallParams.InstallMsgHandlerContext, - FileQueue: DeviceInstallParams.FileQueue, - } - _data.Size = uint32(unsafe.Sizeof(*_data)) - - driverPathUTF16, err := syscall.UTF16FromString(DeviceInstallParams.DriverPath) +func (params *DevInstallParams) SetDriverPath(driverPath string) error { + str, err := syscall.UTF16FromString(driverPath) if err != nil { - return + return err } - copy(_data.DriverPath[:], driverPathUTF16) - - return + copy(params.driverPath[:], str) + return nil } // DI_FLAGS is SP_DEVINSTALL_PARAMS.Flags values diff --git a/tun/wintun/setupapi/zsetupapi_windows.go b/tun/wintun/setupapi/zsetupapi_windows.go index 9292413..2e8a685 100644 --- a/tun/wintun/setupapi/zsetupapi_windows.go +++ b/tun/wintun/setupapi/zsetupapi_windows.go @@ -273,7 +273,7 @@ func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *Dev return } -func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *_SP_DEVINSTALL_PARAMS) (err error) { +func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) if r1 == 0 { if e1 != 0 { @@ -297,7 +297,7 @@ func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfo return } -func setupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *_SP_DEVINSTALL_PARAMS) (err error) { +func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { r1, _, e1 := syscall.Syscall(procSetupDiSetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) if r1 == 0 { if e1 != 0 { -- cgit v1.2.3-59-g8ed1b