[讨论] WinIO 32bit在OS:64bit下执行方法

楼主: srxrrr (干!我是肌董)   2014-11-28 16:51:21
大家都知道WinIO有分32与64bit的版本
但最近发现一件很有趣的事情
32bit的WinIO竟然可以在64bit的OS下正常动作
(不确定是不是全部功能都可以 但读取SMBIOS资讯和进入EC读写都没问题)
这样就可以只写一套程式 通吃32/64的作业系统! (在Win7&8都试过可行)
但...
方法很奇怪 也不确定是不是大家能接受@@
网络上找过关键字好像也没啥看到相关讨论
<<方法>>
Step1.
先执行一次"WinIo64bit"的InitializeWinIo()
(记得要停用驱动程式强制签章喔!)
Step2.
接下来再执行WinIo32bit 即可正常使用32bit环境下的WinIo功能
(直到关机前WinIo32都可正常使用 重开机就要再执行一次Step1 =_=)
原因...我也不知道为什么Orz 乱试试出来的(本身对系统底层也很不了解)
直接的猜测是执行WinIo64时 注册了OS里的某个东西
所以接下来再使用时 由于通道已开通 而可正常使用!
...可能大家会觉得很没意义 但对旧的程式都是32bit所撰写的则应该会有很大帮助@_@
不必修改原code 即可在OS:64bit上执行
<<讨论>>
当然是希望能找出原因
这样则可做出一个真正通吃32/64bit作业系统的WinIo
而不必使用上述这种旁门左道 囧
为了找出为什么会有这种事 我手贱去看了一下WioIo的code
<作法>
在OS:64bit下 与尚未开通WinIo64bit前
使用32bit的WinIo执行
从函数InitializeWinIo()内来寻找问题原因 (因为这是开通WinIo的第一步@@)
<结果>
**必须先强调 是执行到这步就会出现问题 并非后续的步骤没有问题**
逐步测试后发现是在 StartWinIoDriver() 内的
OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS) 发生问题
会回传false 所以WinIo32无法在OS:64bit下执行
反之 如果先执行过WinIo64的InitializeWinIo() 再执行WinIo32的相同函式
则会回传true 即可正常使用
但即使知道问题可能出在这 我也没有能力能解决Orz
不知道有没有高手了解这个部分
能热心分享与讨论的^_^
谢谢!!
作者: LPH66 (-6.2598534e+18f)   2014-11-28 19:15:00
http://tinyurl.com/l8vr4pz OpenSCManager 的说明你看要不要试着抓一下 GetLastError 看到底是什么问题...

Links booklink

Contact Us: admin [ a t ] ucptt.com