Winio64在64位系統中初始化失敗問題


Winio64在64位系統中初始化失敗問題

系統是win7 64位。

語言是C#

http://www.internals.com/下載的winio3.0,下載后的Binaries文件夾中包含WinIo64.dll,WinIo64.sys,將這兩個文件放在debug文件夾下,與執行文件放在一起。

引入winio64.dll和一些基本操作的代碼如下:

       //引入一些函數

        public const int KBC_KEY_CMD = 0x64;//輸入鍵盤按下消息的端口

        public const int KBC_KEY_DATA = 0x60;//輸入鍵盤彈起消息的端口

        [DllImport("WinIo64.dll")]

        public static extern bool InitializeWinIo();

        [DllImport("WinIo64.dll")]

        public static extern bool GetPortVal(IntPtr wPortAddr, out int pdwPortVal,

                    byte bSize);

        [DllImport("WinIo64.dll")]

        public static extern bool SetPortVal(uint wPortAddr, IntPtr dwPortVal,

                    byte bSize);

        [DllImport("WinIo64.dll")]

        public static extern byte MapPhysToLin(byte pbPhysAddr, uint dwPhysSize,

                        IntPtr PhysicalMemoryHandle);

        [DllImport("WinIo64.dll")]

        public static extern bool UnmapPhysicalMemory(IntPtr PhysicalMemoryHandle,

                        byte pbLinAddr);

        [DllImport("WinIo64.dll")]

        public static extern bool GetPhysLong(IntPtr pbPhysAddr, byte pdwPhysVal);

        [DllImport("WinIo64.dll")]

        public static extern bool SetPhysLong(IntPtr pbPhysAddr, byte dwPhysVal);

        [DllImport("WinIo64.dll")]

        public static extern void ShutdownWinIo();

        [DllImport("user32.dll")]

        public static extern int MapVirtualKey(uint Ucode, uint uMapType);

 

 

        //初始化,安裝驅動?

        public void Initialize()

        {

            if (InitializeWinIo())

            {

                b = "1";

                KBCWait4IBE();

            }

            else

            {

                MessageBox.Show("failed");

                b = "3";

            }

        }

        //應該是調用結束要用的,卸載驅動?

        public void Shutdown()

        {

            ShutdownWinIo();

            KBCWait4IBE();

        }

 

        ///等待鍵盤緩沖區為空

        public void KBCWait4IBE()

        {

            int dwVal = 0;

            do

            {

                bool flag = GetPortVal((IntPtr)0x64, out dwVal, 1);

            }

            //while ((dwVal & 0x2) > 0);

            while((dwVal & 0x2)>0);

        }

        /// 模擬鍵盤標按下

        public void KeyDown(Keys vKeyCoad)

        {

            int btScancode = 0;

            btScancode = MapVirtualKey((uint)vKeyCoad, 0);

            KBCWait4IBE();

            SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);

            KBCWait4IBE();

            SetPortVal(KBC_KEY_DATA, (IntPtr)0x60, 1);

            KBCWait4IBE();

            SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);

            KBCWait4IBE();

            SetPortVal(KBC_KEY_DATA, (IntPtr)btScancode, 1);

        }

        /// 模擬鍵盤彈出

        public void KeyUp(Keys vKeyCoad)

        {

            int btScancode = 0;

            btScancode = MapVirtualKey((uint)vKeyCoad, 0);

            KBCWait4IBE();

            SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);

            KBCWait4IBE();

            SetPortVal(KBC_KEY_DATA, (IntPtr)0x60, 1);

            KBCWait4IBE();

            SetPortVal(KBC_KEY_CMD, (IntPtr)0xD2, 1);

            KBCWait4IBE();

            SetPortVal(KBC_KEY_DATA, (IntPtr)(btScancode | 0x80), 1);

        }

 

        /// 模擬一次按鍵

        public void KeyDownUp(Keys vKeyCoad)

        {           

            KeyDown(vKeyCoad);

            Thread.Sleep(100);

            KeyUp(vKeyCoad);

        }

但是發現InitializeWinIo()一直返回的是false。在百度上搜索了N,說要看dll中的代碼,然后改存放文件的地址,但是無果。繼續調試,發現偶爾會有winio64.sys的數字簽名無效的提示。后來在google上搜索了N久發現,果然是這個問題。Winio64.sys沒有正式的數字簽名,只有測試的。需要修改一些東西,具體如下:

cmd->bcdedit /set testsigning on

然后修改WinIo64.sys的測試簽名

1.打開 WinIO64.sys的屬性框,翻到“數字簽名”選項卡,點擊“詳細信息”
2.在新出來的對話框中點擊“查看證書”
3.在又新出來的對話框中點擊“安裝證書”
4.點擊“下一步”,然后選擇“將所有的證書放入下列存儲”
5.點擊瀏覽,選擇“受信任的根證書發布機構”

 

6.點擊“下一步”,然后點擊“完成”
7.在彈出的“安全性警告”對話框中選擇“是”,才能導入成功

然后重啟。

再調試程序,就可以成功初始化了。

 

感謝:http://2817071.blog.51cto.com/2807071/740302

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM