這時候一般是由於IE保護模式的作用,由於IE保護模式依賴於UAC、UIPI和MIC的作用,所以大概可以認為是UAC、UIPI或者MIC的安全功能導致這些輸入法出現問題。
1、一山不容二虎
保護模式下的IE進程運行在“低”級別,所以無法寫入用戶配置文件的區域,這樣就可以阻止惡意網頁破壞用戶和系統數據。同時IE會自動把這種寫入操作重定向到一個特定的區域。這樣既能夠確保安全,同時又能讓IE的組件和加載項繼續正常運行。
但是如果IE加載項必須要和一個“中級”的進程一起共享數據,那麼可能就會有問題,因為這時候IE進程(加載項)所訪問的數據實際上被重定向了,而“中級”依然會去訪問原來的位置,這可能導致錯誤。
解決的辦法:修改這些加載項,讓它和外部進程一樣同時有權限訪問某個特定的區域;或者讓外部進程也運行在“低級”級別。
此外,也可以手工修改系統,把該共享區域設置為允許“低級”進程訪問。
2、UIPI惹的禍
如果IE加載項需要給外部進程發送Windows消息,就會被阻止。這是由於UIPI的作用,只允許高級進程給平級或者低級的進程發送消息,這有點類似以前的地下黨,只允許上級聯系下級(單線聯系)。但是這可能會對一些老的輸入法產生影響,導致無法正常工作。
解決的辦法:對輸入法進行修改,允許外部進程接受指定的Windows消息。或者使用RPC等安全機制,在IE進程和高級進程之間通信。
目前,只能手動修改系統,強行禁用UIPI,確保輸入法的兼容性。不過這會減弱系統的安全性,同時也等於閹割了IE保護模式的功能(盡管系統提示IE保護模式仍然在起作用,實際上已經被大大削弱)。
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System,新建一個DWORD鍵值EnableUIPI,設置為0即可。
重啟系統,再測試幾下,應該可以解決類似紫光拼音、拼音加加的問題,而且是真正的“徹底”解決。