summaryrefslogtreecommitdiff
path: root/setupapi/setupapi_windows.go
diff options
context:
space:
mode:
authorSimon Rozman <simon@rozman.si>2019-02-01 13:59:53 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2019-02-05 12:59:42 +0100
commitf1d5db6547738a24b660d766d0690bb9642cc1bb (patch)
tree0f576f51544ad37c36f2f7a878cf6922b4afacf1 /setupapi/setupapi_windows.go
parentdce5192d860888e6af3e7fa8a7e4b2c776274e69 (diff)
downloadwireguard-go-f1d5db6547738a24b660d766d0690bb9642cc1bb.tar.gz
wireguard-go-f1d5db6547738a24b660d766d0690bb9642cc1bb.zip
Add support for setupapi.SetupDi(Get|Set)DeviceInstallParams()
Signed-off-by: Simon Rozman <simon@rozman.si>
Diffstat (limited to 'setupapi/setupapi_windows.go')
-rw-r--r--setupapi/setupapi_windows.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/setupapi/setupapi_windows.go b/setupapi/setupapi_windows.go
index 282b9d0..3fa0cbb 100644
--- a/setupapi/setupapi_windows.go
+++ b/setupapi/setupapi_windows.go
@@ -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)
+}