setupapi: Merge _SP_DEVINFO_LIST_DETAIL_DATA and DevInfoListDetailData

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman 2019-02-07 22:23:03 +01:00
parent 6d2729dccc
commit 05d25fd1b7
4 changed files with 28 additions and 28 deletions

View File

@ -29,19 +29,14 @@ func SetupDiCreateDeviceInfoListEx(classGUID *windows.GUID, hwndParent uintptr,
return setupDiCreateDeviceInfoListEx(classGUID, hwndParent, machineNameUTF16, 0) return setupDiCreateDeviceInfoListEx(classGUID, hwndParent, machineNameUTF16, 0)
} }
//sys setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *_SP_DEVINFO_LIST_DETAIL_DATA) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW //sys setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW
// SetupDiGetDeviceInfoListDetail function retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name. // SetupDiGetDeviceInfoListDetail function retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name.
func SetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo) (deviceInfoSetDetailData *DevInfoListDetailData, err error) { func SetupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo) (deviceInfoSetDetailData *DevInfoListDetailData, err error) {
var _data _SP_DEVINFO_LIST_DETAIL_DATA data := &DevInfoListDetailData{}
_data.Size = uint32(unsafe.Sizeof(_data)) data.size = uint32(unsafe.Sizeof(*data))
err = setupDiGetDeviceInfoListDetail(deviceInfoSet, &_data) return data, setupDiGetDeviceInfoListDetail(deviceInfoSet, data)
if err != nil {
return
}
return _data.toGo(), nil
} }
// GetDeviceInfoListDetail method retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name. // GetDeviceInfoListDetail method retrieves information associated with a device information set including the class GUID, remote computer handle, and remote computer name.

View File

@ -63,7 +63,7 @@ func TestSetupDiGetDeviceInfoListDetail(t *testing.T) {
t.Error("SetupDiGetDeviceInfoListDetail returned non-NULL remote machine handle") t.Error("SetupDiGetDeviceInfoListDetail returned non-NULL remote machine handle")
} }
if data.RemoteMachineName != "" { if data.GetRemoteMachineName() != "" {
t.Error("SetupDiGetDeviceInfoListDetail returned non-NULL remote machine name") t.Error("SetupDiGetDeviceInfoListDetail returned non-NULL remote machine name")
} }
} }
@ -86,10 +86,16 @@ func TestSetupDiGetDeviceInfoListDetail(t *testing.T) {
t.Error("SetupDiGetDeviceInfoListDetail returned NULL remote machine handle") t.Error("SetupDiGetDeviceInfoListDetail returned NULL remote machine handle")
} }
if data.RemoteMachineName != computerName { if data.GetRemoteMachineName() != computerName {
t.Error("SetupDiGetDeviceInfoListDetail returned different remote machine name") t.Error("SetupDiGetDeviceInfoListDetail returned different remote machine name")
} }
} }
data = &DevInfoListDetailData{}
data.SetRemoteMachineName("foobar")
if data.GetRemoteMachineName() != "foobar" {
t.Error("DevInfoListDetailData.(Get|Set)RemoteMachineName() differ")
}
} }
func TestSetupDiCreateDeviceInfo(t *testing.T) { func TestSetupDiCreateDeviceInfo(t *testing.T) {

View File

@ -57,26 +57,25 @@ type DevInfoData struct {
_ uintptr _ uintptr
} }
type _SP_DEVINFO_LIST_DETAIL_DATA struct {
Size uint32
ClassGUID windows.GUID
RemoteMachineHandle windows.Handle
RemoteMachineName [SP_MAX_MACHINENAME_LENGTH]uint16
}
func (_data *_SP_DEVINFO_LIST_DETAIL_DATA) toGo() *DevInfoListDetailData {
return &DevInfoListDetailData{
ClassGUID: _data.ClassGUID,
RemoteMachineHandle: _data.RemoteMachineHandle,
RemoteMachineName: windows.UTF16ToString(_data.RemoteMachineName[:]),
}
}
// DevInfoListDetailData is a structure for detailed information on a device information set (used for SetupDiGetDeviceInfoListDetail which supercedes the functionality of SetupDiGetDeviceInfoListClass). // DevInfoListDetailData is a structure for detailed information on a device information set (used for SetupDiGetDeviceInfoListDetail which supercedes the functionality of SetupDiGetDeviceInfoListClass).
type DevInfoListDetailData struct { type DevInfoListDetailData struct {
size uint32
ClassGUID windows.GUID ClassGUID windows.GUID
RemoteMachineHandle windows.Handle RemoteMachineHandle windows.Handle
RemoteMachineName string remoteMachineName [SP_MAX_MACHINENAME_LENGTH]uint16
}
func (data *DevInfoListDetailData) GetRemoteMachineName() string {
return windows.UTF16ToString(data.remoteMachineName[:])
}
func (data *DevInfoListDetailData) SetRemoteMachineName(remoteMachineName string) error {
str, err := syscall.UTF16FromString(remoteMachineName)
if err != nil {
return err
}
copy(data.remoteMachineName[:], str)
return nil
} }
// DI_FUNCTION is function type for device installer // DI_FUNCTION is function type for device installer

View File

@ -79,7 +79,7 @@ func setupDiCreateDeviceInfoListEx(classGUID *windows.GUID, hwndParent uintptr,
return return
} }
func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *_SP_DEVINFO_LIST_DETAIL_DATA) (err error) { func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) {
r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0) r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0)
if r1 == 0 { if r1 == 0 {
if e1 != 0 { if e1 != 0 {