看板 C_and_CPP 關於我們 聯絡資訊
大家都知道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 不知道有沒有高手瞭解這個部分 能熱心分享與討論的^_^ 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.72.212.97 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1417164684.A.052.html ※ 編輯: srxrrr (211.72.212.97), 11/28/2014 16:55:06 ※ 編輯: srxrrr (211.72.212.97), 11/28/2014 16:57:35
LPH66: http://tinyurl.com/l8vr4pz OpenSCManager 的說明 11/28 19:15
LPH66: 你看要不要試著抓一下 GetLastError 看到底是什麼問題... 11/28 19:16