Add support for setupapi.SetupDi(Get|Set)ClassInstallParams()
Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
parent
f1d5db6547
commit
a5a1ece32f
|
@ -20,6 +20,8 @@ import (
|
||||||
//sys setupDiOpenDevRegKey(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key windows.Handle, err error) [failretval==windows.InvalidHandle] = setupapi.SetupDiOpenDevRegKey
|
//sys setupDiOpenDevRegKey(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key windows.Handle, err error) [failretval==windows.InvalidHandle] = setupapi.SetupDiOpenDevRegKey
|
||||||
//sys setupDiGetDeviceInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, DeviceInstallParams *_SP_DEVINSTALL_PARAMS) (err error) = setupapi.SetupDiGetDeviceInstallParamsW
|
//sys setupDiGetDeviceInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, DeviceInstallParams *_SP_DEVINSTALL_PARAMS) (err error) = setupapi.SetupDiGetDeviceInstallParamsW
|
||||||
//sys setupDiSetDeviceInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, DeviceInstallParams *_SP_DEVINSTALL_PARAMS) (err error) = setupapi.SetupDiSetDeviceInstallParamsW
|
//sys setupDiSetDeviceInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, DeviceInstallParams *_SP_DEVINSTALL_PARAMS) (err error) = setupapi.SetupDiSetDeviceInstallParamsW
|
||||||
|
//sys SetupDiGetClassInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, ClassInstallParams *SP_CLASSINSTALL_HEADER, ClassInstallParamsSize uint32, RequiredSize *uint32) (err error) = setupapi.SetupDiGetClassInstallParamsW
|
||||||
|
//sys SetupDiSetClassInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, ClassInstallParams *SP_CLASSINSTALL_HEADER, ClassInstallParamsSize uint32) (err error) = setupapi.SetupDiSetClassInstallParamsW
|
||||||
|
|
||||||
// SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements for a local or a remote computer.
|
// SetupDiGetClassDevsEx function returns a handle to a device information set that contains requested device information elements for a local or a remote computer.
|
||||||
func SetupDiGetClassDevsEx(ClassGUID *windows.GUID, Enumerator string, hwndParent uintptr, Flags DIGCF, DeviceInfoSet DevInfo, MachineName string) (handle DevInfo, err error) {
|
func SetupDiGetClassDevsEx(ClassGUID *windows.GUID, Enumerator string, hwndParent uintptr, Flags DIGCF, DeviceInfoSet DevInfo, MachineName string) (handle DevInfo, err error) {
|
||||||
|
|
|
@ -208,3 +208,55 @@ type DevInstallParams struct {
|
||||||
FileQueue HSPFILEQ
|
FileQueue HSPFILEQ
|
||||||
DriverPath string
|
DriverPath string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DI_FUNCTION is function type for device installer
|
||||||
|
type DI_FUNCTION uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
DIF_SELECTDEVICE DI_FUNCTION = 0x00000001
|
||||||
|
DIF_INSTALLDEVICE DI_FUNCTION = 0x00000002
|
||||||
|
DIF_ASSIGNRESOURCES DI_FUNCTION = 0x00000003
|
||||||
|
DIF_PROPERTIES DI_FUNCTION = 0x00000004
|
||||||
|
DIF_REMOVE DI_FUNCTION = 0x00000005
|
||||||
|
DIF_FIRSTTIMESETUP DI_FUNCTION = 0x00000006
|
||||||
|
DIF_FOUNDDEVICE DI_FUNCTION = 0x00000007
|
||||||
|
DIF_SELECTCLASSDRIVERS DI_FUNCTION = 0x00000008
|
||||||
|
DIF_VALIDATECLASSDRIVERS DI_FUNCTION = 0x00000009
|
||||||
|
DIF_INSTALLCLASSDRIVERS DI_FUNCTION = 0x0000000A
|
||||||
|
DIF_CALCDISKSPACE DI_FUNCTION = 0x0000000B
|
||||||
|
DIF_DESTROYPRIVATEDATA DI_FUNCTION = 0x0000000C
|
||||||
|
DIF_VALIDATEDRIVER DI_FUNCTION = 0x0000000D
|
||||||
|
DIF_DETECT DI_FUNCTION = 0x0000000F
|
||||||
|
DIF_INSTALLWIZARD DI_FUNCTION = 0x00000010
|
||||||
|
DIF_DESTROYWIZARDDATA DI_FUNCTION = 0x00000011
|
||||||
|
DIF_PROPERTYCHANGE DI_FUNCTION = 0x00000012
|
||||||
|
DIF_ENABLECLASS DI_FUNCTION = 0x00000013
|
||||||
|
DIF_DETECTVERIFY DI_FUNCTION = 0x00000014
|
||||||
|
DIF_INSTALLDEVICEFILES DI_FUNCTION = 0x00000015
|
||||||
|
DIF_UNREMOVE DI_FUNCTION = 0x00000016
|
||||||
|
DIF_SELECTBESTCOMPATDRV DI_FUNCTION = 0x00000017
|
||||||
|
DIF_ALLOW_INSTALL DI_FUNCTION = 0x00000018
|
||||||
|
DIF_REGISTERDEVICE DI_FUNCTION = 0x00000019
|
||||||
|
DIF_NEWDEVICEWIZARD_PRESELECT DI_FUNCTION = 0x0000001A
|
||||||
|
DIF_NEWDEVICEWIZARD_SELECT DI_FUNCTION = 0x0000001B
|
||||||
|
DIF_NEWDEVICEWIZARD_PREANALYZE DI_FUNCTION = 0x0000001C
|
||||||
|
DIF_NEWDEVICEWIZARD_POSTANALYZE DI_FUNCTION = 0x0000001D
|
||||||
|
DIF_NEWDEVICEWIZARD_FINISHINSTALL DI_FUNCTION = 0x0000001E
|
||||||
|
DIF_UNUSED1 DI_FUNCTION = 0x0000001F
|
||||||
|
DIF_INSTALLINTERFACES DI_FUNCTION = 0x00000020
|
||||||
|
DIF_DETECTCANCEL DI_FUNCTION = 0x00000021
|
||||||
|
DIF_REGISTER_COINSTALLERS DI_FUNCTION = 0x00000022
|
||||||
|
DIF_ADDPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000023
|
||||||
|
DIF_ADDPROPERTYPAGE_BASIC DI_FUNCTION = 0x00000024
|
||||||
|
DIF_TROUBLESHOOTER DI_FUNCTION = 0x00000026
|
||||||
|
DIF_POWERMESSAGEWAKE DI_FUNCTION = 0x00000027
|
||||||
|
DIF_ADDREMOTEPROPERTYPAGE_ADVANCED DI_FUNCTION = 0x00000028
|
||||||
|
DIF_UPDATEDRIVER_UI DI_FUNCTION = 0x00000029
|
||||||
|
DIF_FINISHINSTALL_ACTION DI_FUNCTION = 0x0000002A
|
||||||
|
)
|
||||||
|
|
||||||
|
// SP_CLASSINSTALL_HEADER is the first member of any class install parameters structure. It contains the device installation request code that defines the format of the rest of the install parameters structure.
|
||||||
|
type SP_CLASSINSTALL_HEADER struct {
|
||||||
|
Size uint32
|
||||||
|
InstallFunction DI_FUNCTION
|
||||||
|
}
|
||||||
|
|
|
@ -46,6 +46,8 @@ var (
|
||||||
procSetupDiOpenDevRegKey = modsetupapi.NewProc("SetupDiOpenDevRegKey")
|
procSetupDiOpenDevRegKey = modsetupapi.NewProc("SetupDiOpenDevRegKey")
|
||||||
procSetupDiGetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiGetDeviceInstallParamsW")
|
procSetupDiGetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiGetDeviceInstallParamsW")
|
||||||
procSetupDiSetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiSetDeviceInstallParamsW")
|
procSetupDiSetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiSetDeviceInstallParamsW")
|
||||||
|
procSetupDiGetClassInstallParamsW = modsetupapi.NewProc("SetupDiGetClassInstallParamsW")
|
||||||
|
procSetupDiSetClassInstallParamsW = modsetupapi.NewProc("SetupDiSetClassInstallParamsW")
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupDiGetClassDevsEx(ClassGUID *windows.GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, DeviceInfoSet DevInfo, MachineName *uint16, reserved uintptr) (handle DevInfo, err error) {
|
func setupDiGetClassDevsEx(ClassGUID *windows.GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, DeviceInfoSet DevInfo, MachineName *uint16, reserved uintptr) (handle DevInfo, err error) {
|
||||||
|
@ -133,3 +135,27 @@ func setupDiSetDeviceInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEV
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetupDiGetClassInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, ClassInstallParams *SP_CLASSINSTALL_HEADER, ClassInstallParamsSize uint32, RequiredSize *uint32) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall6(procSetupDiGetClassInstallParamsW.Addr(), 5, uintptr(DeviceInfoSet), uintptr(unsafe.Pointer(DeviceInfoData)), uintptr(unsafe.Pointer(ClassInstallParams)), uintptr(ClassInstallParamsSize), uintptr(unsafe.Pointer(RequiredSize)), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
} else {
|
||||||
|
err = syscall.EINVAL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetupDiSetClassInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, ClassInstallParams *SP_CLASSINSTALL_HEADER, ClassInstallParamsSize uint32) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall6(procSetupDiSetClassInstallParamsW.Addr(), 4, uintptr(DeviceInfoSet), uintptr(unsafe.Pointer(DeviceInfoData)), uintptr(unsafe.Pointer(ClassInstallParams)), uintptr(ClassInstallParamsSize), 0, 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
} else {
|
||||||
|
err = syscall.EINVAL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue