mirror of
https://git.zx2c4.com/wireguard-go
synced 2025-10-06 17:17:02 +08:00
Add support for setupapi.SetupDi(Get|Set)DeviceInstallParams()
Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:

committed by
Jason A. Donenfeld

parent
dce5192d86
commit
f1d5db6547
@@ -18,6 +18,8 @@ import (
|
||||
//sys setupDiGetDeviceInfoListDetail(DeviceInfoSet DevInfo, DeviceInfoSetDetailData *_SP_DEVINFO_LIST_DETAIL_DATA) (err error) = setupapi.SetupDiGetDeviceInfoListDetailW
|
||||
//sys setupDiEnumDeviceInfo(DeviceInfoSet DevInfo, MemberIndex uint32, DeviceInfoData *SP_DEVINFO_DATA) (err error) = setupapi.SetupDiEnumDeviceInfo
|
||||
//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
|
||||
|
||||
// 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) {
|
||||
@@ -67,3 +69,46 @@ func SetupDiOpenDevRegKey(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA
|
||||
handle, err := setupDiOpenDevRegKey(DeviceInfoSet, DeviceInfoData, Scope, HwProfile, KeyType, samDesired)
|
||||
return registry.Key(handle), err
|
||||
}
|
||||
|
||||
// SetupDiGetDeviceInstallParams function retrieves device installation parameters for a device information set or a particular device information element.
|
||||
func SetupDiGetDeviceInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA) (data *DevInstallParams, err error) {
|
||||
var DeviceInstallParams _SP_DEVINSTALL_PARAMS
|
||||
DeviceInstallParams.Size = uint32(unsafe.Sizeof(DeviceInstallParams))
|
||||
|
||||
err = setupDiGetDeviceInstallParams(DeviceInfoSet, DeviceInfoData, &DeviceInstallParams)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
data = &DevInstallParams{
|
||||
Flags: DeviceInstallParams.Flags,
|
||||
FlagsEx: DeviceInstallParams.FlagsEx,
|
||||
hwndParent: DeviceInstallParams.hwndParent,
|
||||
InstallMsgHandler: DeviceInstallParams.InstallMsgHandler,
|
||||
InstallMsgHandlerContext: DeviceInstallParams.InstallMsgHandlerContext,
|
||||
FileQueue: DeviceInstallParams.FileQueue,
|
||||
DriverPath: windows.UTF16ToString(DeviceInstallParams.DriverPath[:]),
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// SetupDiSetDeviceInstallParams function sets device installation parameters for a device information set or a particular device information element.
|
||||
func SetupDiSetDeviceInstallParams(DeviceInfoSet DevInfo, DeviceInfoData *SP_DEVINFO_DATA, DeviceInstallParams *DevInstallParams) (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))
|
||||
|
||||
_p0, err := syscall.UTF16FromString(DeviceInstallParams.DriverPath)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
copy(data.DriverPath[:], _p0)
|
||||
|
||||
return setupDiSetDeviceInstallParams(DeviceInfoSet, DeviceInfoData, &data)
|
||||
}
|
||||
|
Reference in New Issue
Block a user