WinIO初始化失敗的幾個原因

2022-02-02 12:33:33 字數 1145 閱讀 3341

winio是乙個能夠開啟一些作業系統io特權操作的乙個庫,簡單的來說它載入了一些驅動。通重載入的驅動可以直接的訪問埠。在工控上,我們可以利用這個庫直接操作io卡的位址。例如我最近在做的乙個數控鑽銑床的io卡和運動控制卡就是很老的乙個卡,在win98下面工作很正常,但是在nt核心上就會出現非法指令呼叫的問題。這些非法指令來自於底層對io卡和運動控制卡的直接位址訪問。在98時代,這些操作都沒有受到保護的,在nt核心下就會出現保護問題。經試驗,經過winio初始化載入驅動以後再進行io卡直接訪問,很成功。

但應用的時候,就出現了一些莫名其妙的問題。應用winio只需要呼叫兩個函式initializewinio(),和最後的shutdownwinio()即可。initializewinio()將會返回乙個bool值指示初始化結果。就是這個函式造成了許多困擾。

第一次困擾是在一次除錯中,經常初始化失敗,一旦成功以後就總是成功的。剛開始以為是initializewinio()以後沒有shutdownwinioi()造成的,後來看了winio的c example證明只寫initializewinio()一樣能夠程序一旦結束,由initializewinio初始化的資源自然就結束了。所以不存在上次執行影響這次執行的事情。後來突然發現,winio相關的dll,vxd,sys竟然是綠色的。綠色在windowsxp系統裡面代表了檔案是被efs加密的。我為了工程的保密,把所有的工程目錄都進行了efs加密。efs加密會影響磁碟效能,原因就在於其加解密過程。但是這裡很奇怪,可能是間歇性的efs解密速度沒有跟上winio中載入驅動的速度,造成讀取的sys和vxd裝置驅動是混亂的,最終導致載入失敗。將efs加密取消,問題解決。

第二次困找在我用c#寫了乙個dllimport,然後進行呼叫,結果,總是返回false。很疑惑,winio相關的檔案都放到一起的,怎麼還是這樣的呢?vs2005單元測試裡也會失敗。究其原因還是路徑的問題造成。分析winio的源**,可以發現initializewinio()會呼叫乙個getdriverpath這個函式:

bool getdriverpath()

這裡面已經很清楚的知道了什麼情況下會false了。注意winio.sys存放的位置問題就能使之初始化正常。

其實還可以更加詳細的列印出initializewinio()中每步的執行過程,這樣更容易判斷是哪個地方出現了問題。

就先寫到這裡吧,winio是個很好很強大,很黃很暴力的乙個庫~~~

OCI環境初始化失敗

在suse10上安裝了oracle 11g,結果編寫oci測試程式時,老是初始化環境失敗 ociinitialize 報1804錯誤,在google上搜尋了一下,原來是沒有設定oracle base oracle home等環境變數導致的,設定後,程式正常了。如 export oracle base...

bash的幾個初始化檔案

0 etc environment 設定整個系統的環境,與登入使用者無關。1 etc profile 全域性 公有 配置,不管是哪個使用者,登入時都會讀取該檔案。2 ect bashrc.bashrc 或 etc bashrc 它也是全域性 公有 的 bash執行時,不管是何種方式,都會讀取此檔案。...

EAS輔助賬初始化失敗

前提 1 科目已錄入 2 科目餘額初始化結束 問題 一級科目的輔助賬在錄入結束後不准再新增輔助賬型別,於是,我便想通過輔助賬型別變更的方式來為以及科目新增輔助賬型別,但這是有總是報如下錯誤 於是,我便懷疑是不是有未過賬的憑證,但查了很久卻依然查不出有未過賬的憑證,所以,我想這也許時eas測試版的乙個...