找回密码
 加入
搜索
查看: 2089|回复: 7

[原创] SetupAPI匹配win10-64位(部分)

[复制链接]
发表于 2019-1-10 15:25:23 | 显示全部楼层 |阅读模式
本帖最后由 gz13802424 于 2019-1-10 22:21 编辑

SetupAPI 里面包含了很多很实用的API调用,但是SetupAPI是 11/20/2009 书写的,到现在已经有10年时间了,已经没办法完全匹配到最新的Win10系统

我在日常使用时,把平时自己使用到的几个API调用重新修改了,使之能在Win7 32位(64位)、Win10 32位(64位)下正常使用

并且在这里还要多谢haijie1223” 大哥的指点

不多废话了,直接上干货

一、_CM_Get_Process_Heap( “haijie1223” 大哥的指点)
原定义
$iResult = DllCall("Kernel32.dll", "long", "GetProcessHeap")

修改为
$iResult = DllCall("Kernel32.dll", "handle", "GetProcessHeap")

二、_SetupDiEnumDeviceInfo(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))

三、_SetupDiOpenDeviceInfo(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))


四、 _SetupDiCreateDeviceInfo(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))

五、_SetupDiGetDeviceInterfaceDetail(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))

六、_SetupDiOpenDeviceInterface(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))

七、_SetupDiRegisterDeviceInfo(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))

八、_SetupDiCreateDeviceInterface(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))

九、_SetupDiEnumDeviceInterfaces(自己折腾出来的)
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 28)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))

十、_SetupDiGetClassImageList(自己折腾出来的,一直没直接验证是正确但是也没有异常,这一条的修改我自己标注为 “存疑”
原定义
DllStructSetData($tSP_DEVINFO_DATA, "Size", 12)
修改为
DllStructSetData($tSP_DEVINFO_DATA, "Size",  DllStructGetSize($tSP_DEVINFO_DATA))

---------------------------------------------------  分  ----  割  ----  线  ---------------------------------------------------
P版曾经发了一个AU3书写服务形态的例程,但是没有匹配到64位编译模式,我自己也折腾了一下
原定义
$pServiceTable = _ServiceHeapAlloc(32)
$tServiceTable = DllStructCreate($tagSERVICE_TABLE_ENTRY, $pServiceTable)
DllStructSetData($tServiceTable, "ServiceName", $pServiceTable + 16)
DllStructSetData($tServiceTable, "ServiceMain", $pServiceMain)

$tServiceName = DllStructCreate("char ServiceName[16]", $pServiceTable + 16)
DllStructSetData($tServiceName, "ServiceName", "AutoIt3Service")

$tServiceStatus = DllStructCreate($tagSERVICE_STATUS)
$pServiceStatus = DllStructGetPtr($tServiceStatus)
DllStructSetData($tServiceStatus, "ServiceType", 16)
DllStructSetData($tServiceStatus, "ControlsAccepted", 3)


修改为
$pServiceTable = _ServiceHeapAlloc(32 * (@AutoItX64 + 1))
$tServiceTable = DllStructCreate($tagSERVICE_TABLE_ENTRY, $pServiceTable)
DllStructSetData($tServiceTable, "ServiceName", $pServiceTable + 16 * (@AutoItX64 + 1))
DllStructSetData($tServiceTable, "ServiceMain", $pServiceMain)

$tServiceName = DllStructCreate("char ServiceName[" & 16 * (@AutoItX64 + 1) & "]", $pServiceTable + 16 * (@AutoItX64 + 1))
DllStructSetData($tServiceName, "ServiceName", $sServiceName)

$tServiceStatus = DllStructCreate($tagSERVICE_STATUS)
$pServiceStatus = DllStructGetPtr($tServiceStatus)
DllStructSetData($tServiceStatus, "ServiceType", 16 * (@AutoItX64 + 1))
DllStructSetData($tServiceStatus, "ControlsAccepted", 3)

评分

参与人数 4金钱 +290 贡献 +23 收起 理由
user3000 + 60 + 1 赞一个!
haijie1223 + 100 + 1 很给力!
lpxx + 50 + 20 赞一个!
afan + 80 + 1 真是认真

查看全部评分

发表于 2019-1-10 15:30:13 来自手机 | 显示全部楼层
谁是流氓发
 楼主| 发表于 2019-1-10 15:32:07 | 显示全部楼层
SetupAPI 接近7000行的代码,我因兴趣而半路出家学习编程,英文底子弱,实在是没办法去从头到尾梳理一次,所以在这里只是贴出部分代码,希望能抛砖引玉,要是能引来某位大神把SetupAPI重新梳理一下那才是真正造福大众
 楼主| 发表于 2019-1-10 15:41:53 | 显示全部楼层

刚入坑,对各位大神还不太了解,在这里引用了他在QQ的昵称“流氓发”
他QQ的头像和你在论坛上的头是一样,你自己自我介绍一下



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2019-1-10 16:33:41 | 显示全部楼层
高手啊,大神,应该有人更新一下了。
发表于 2019-1-10 17:39:59 | 显示全部楼层
gz13802424 发表于 2019-1-10 15:41
刚入坑,对各位大神还不太了解,在这里引用了他在QQ的昵称“流氓发”
他QQ的头像和你在论坛上的头是一样 ...

不认识。。。
发表于 2019-1-14 22:31:23 | 显示全部楼层
最近咋了都在玩这个。。。
 楼主| 发表于 2019-1-14 23:18:51 | 显示全部楼层
yglgogogo 发表于 2019-1-14 22:31
最近咋了都在玩这个。。。

看到你发的贴子了,先多谢

有空看看我这个http://www.autoitx.com/thread-71064-1-1.html,帮忙把下面的调用语法写一下(关键是入数参数结构和返回参数结构)
                 "ApplyChanges hresult(dword);" & _
                "GetWallpaper hresult(wstr;uint;dword);" & _
                "SetWallpaper hresult(wstr;dword);" & _
                "GetWallpaperOptions hresult(struct*;dword);" & _
                "SetWallpaperOptions hresult(struct*;dword);" & _
                "GetPattern hresult(wstr;uint;dword);" & _
                "SetPattern hresult(wstr;dword);" & _
                "GetDesktopItemOptions hresult(struct*;dword);" & _
                "SetDesktopItemOptions hresult(struct*;dword);" & _
                "AddDesktopItem hresult(struct*;dword);" & _
                "AddDesktopItemWithUI hresult(hwnd;struct*;dword);" & _
                "ModifyDesktopItem hresult(struct*;dword);" & _
                "RemoveDesktopItem hresult(struct*;dword);" & _
                "GetDesktopItemCount hresult(int*;dword);" & _
                "GetDesktopItem hresult(int;struct*;dword);" & _
                "GetDesktopItemByID hresult(ulong_ptr;struct*;dword);" & _
                "GenerateDesktopItemHtml hresult(wstr;struct*;dword);" & _
                "AddUrl hresult(hwnd;wstr;struct*;dword);" & _
                "GetDesktopItemBySource hresult(wstr;struct*;dword);"
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-21 18:55 , Processed in 0.096550 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表