summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tun/wintun/setupapi/setupapi_windows.go27
-rw-r--r--tun/wintun/setupapi/setupapi_windows_test.go6
-rw-r--r--tun/wintun/setupapi/types_windows.go51
-rw-r--r--tun/wintun/setupapi/zsetupapi_windows.go4
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 {