Winio64在64位系统中初始化失败问题

来源:互联网 发布:大数据应用于电力工程 编辑:程序博客网 时间:2024/05/21 06:25

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

 


http://www.cnblogs.com/wangqian0realmagic/archive/2012/03/26/2418671.html

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩发烧怎么办39度要吃消炎药吗 孩子不爱吃水果蔬菜怎么办 一岁宝宝不吃水果怎么办 一岁宝宝不爱吃水果怎么办 1岁多宝宝不吃水果怎么办 中学生不爱与家长交流怎么办 孩子一直37度多怎么办 小孩39度3算高烧怎么办 7岁发烧怎么办如何退烧 7岁反复发烧7天怎么办 一岁发烧39.8度怎么办 反复发烧39度4天怎么办 大人发烧到39度怎么办 小孩高烧39度多怎么办 孩子嗓子发炎发烧怎么办吃什么药 猫咪吃了点桃子怎么办 猫吃了牛油果怎么办 苹果手机死机开不了机怎么办 新生儿出生第一天没奶水怎么办 第一天断奶奶水一直流出怎么办 3岁宝宝不长个子怎么办 5个月宝宝不长个怎么办 孩子比同龄人矮很多怎么办 孕妇做春梦宫缩怎么办 减肥掉头发很厉害怎么办 孕妇吃了金枪鱼罐头怎么办 怀孕吃了烂水果怎么办 快递水果压坏了怎么办 谈对象被骗了钱怎么办 如果遇到半夜坏人敲门怎么办 小孩晚上不进房间睡觉怎么办 房子照不到阳光潮湿怎么办 4个月婴儿不拉屎怎么办 小孩六个月奶不够吃怎么办 到晚上就没奶水怎么办 20多天奶水不够怎么办 四个月奶不够吃怎么办 7个月宝宝不肯吃东西怎么办 6个月宝宝不肯吃东西怎么办 十一个月宝宝不肯吃东西怎么办 九个月宝宝不肯吃辅食怎么办