[討論] 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