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 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 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.
|
||||
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
|
||||
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")
|
||||
procSetupDiGetDeviceInstallParamsW = modsetupapi.NewProc("SetupDiGetDeviceInstallParamsW")
|
||||
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) {
|
||||
|
@ -133,3 +135,27 @@ func setupDiSetDeviceInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEV
|
|||
}
|
||||
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