pass86
驱动牛犊
驱动牛犊
  • 注册日期2007-09-27
  • 最后登录2008-03-26
  • 粉丝1
  • 关注0
  • 积分320分
  • 威望33点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
阅读:2413回复:5

虚拟设备已经做好了,怎么在驱动级模拟键盘按键?

楼主#
更多 发布于:2007-09-28 16:18
虚拟设备已经做好了,怎么在驱动级模拟键盘按键?
用了
1、写端口大法
#define defI8042_DATA_PORT ((PUCHAR)0x60)
#define defI8042_CTRL_PORT ((PUCHAR)0x64)
#define defOBUFFER_FULL 0x01

BOOLEAN
WaitForKeyboardWrite(VOID)
{
    INT i;
    UCHAR c;

    for (i = 0; i < 1000; ++i)
    {
        KeStallExecutionProcessor(50);
        c = READ_PORT_UCHAR(defI8042_CTRL_PORT);
        if ((c & defOBUFFER_FULL) == defOBUFFER_FULL)
            break;
    }

    return i ? TRUE : FALSE;
}

VOID PressKeyByScanCode(
    IN CONST BYTE ScanCode
)
{
    WRITE_PORT_UCHAR(defI8042_CTRL_PORT, 0xd2);

    WaitForKeyboardWrite();

    WRITE_PORT_UCHAR(defI8042_DATA_PORT, ScanCode);
}

用DeviceIoControl让驱动运行了PressKeyByScanCode,不管用,请帮帮忙。
pass86
驱动牛犊
驱动牛犊
  • 注册日期2007-09-27
  • 最后登录2008-03-26
  • 粉丝1
  • 关注0
  • 积分320分
  • 威望33点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-28 22:35
帮帮忙,事关重大。想要什么好处,可以商量。
pass86
驱动牛犊
驱动牛犊
  • 注册日期2007-09-27
  • 最后登录2008-03-26
  • 粉丝1
  • 关注0
  • 积分320分
  • 威望33点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-28 22:36
尽快,pass86@gmail.com,2日内。
pass86
驱动牛犊
驱动牛犊
  • 注册日期2007-09-27
  • 最后登录2008-03-26
  • 粉丝1
  • 关注0
  • 积分320分
  • 威望33点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-29 01:30
ubuntu_amateur
驱动牛犊
驱动牛犊
  • 注册日期2006-08-04
  • 最后登录2008-12-04
  • 粉丝0
  • 关注0
  • 积分970分
  • 威望98点
  • 贡献值0点
  • 好评度97点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-11-02 15:09
在应用层,用钩子函数也可以实现啊。为什么要放在驱动级?
there is a will,there is a way
pass86
驱动牛犊
驱动牛犊
  • 注册日期2007-09-27
  • 最后登录2008-03-26
  • 粉丝1
  • 关注0
  • 积分320分
  • 威望33点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-11-10 11:19
因为NP
游客

返回顶部