kerzhou
驱动牛犊
驱动牛犊
  • 注册日期2006-10-09
  • 最后登录2007-08-11
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:1961回复:0

虚拟鼠标驱动请教

楼主#
更多 发布于:2007-08-10 10:03
我现在驱动已经可以挂载,而且AP可以和它通信,可以发ioctl给它。但是构造的MOUSE_INPUT_DATA 似乎不对,因为结果没有反映啊。

我的代码如下,各位高人帮帮小弟啊。上面的是模拟右键按下,下面的是模拟右键按上。但是似乎没有反映。

case IOCTL_REGISTER_EVENT:
                if (outputBufferLength < sizeof(long))
                {
                    Status = STATUS_INVALID_BUFFER_SIZE;
                    break;
                }

                hEvent = *(long*) Irp->AssociatedIrp.SystemBuffer;
                if(hEvent==1)
                {
                    ULONG NumSend = 0;
                    int i;
                    MOUSE_INPUT_DATA        Data[6];
                    RtlZeroMemory(Data, sizeof(Data));

                    for(i =0 ; i< 6 ; ++i)
                    {
                        Data.Flags        = MOUSE_MOVE_ABSOLUTE;
                        Data.RawButtons   = MOUSE_BUTTON_1;
                        Data.ButtonFlags  = MOUSE_BUTTON_1_DOWN;
                        Data.UnitId       = g_UnitId ;
                        Data.LastX        = 0;
                        Data.LastY        = 0;
                    }
                    g_SeviceCallback(g_KeyboardClassDO, Data, &Data[1], &NumSend);

                    Status = STATUS_SUCCESS;
                    pversion = (PULONG) Irp->AssociatedIrp.SystemBuffer;
                    *pversion = iTmp;
                }
                break;
            case IOCTL_UNREGISTER_EVENT:
                if (outputBufferLength < sizeof(long))
                {
                    Status = STATUS_INVALID_BUFFER_SIZE;
                    break;
                }

                hEvent = *(long*) Irp->AssociatedIrp.SystemBuffer;
                if(hEvent==1)
                {
                    ULONG NumSend = 0;
                    int i;
                    MOUSE_INPUT_DATA        Data[6];
                    RtlZeroMemory(Data, sizeof(Data));

                    for(i =0 ; i< 6 ; ++i)
                    {
                        Data.Flags        = MOUSE_MOVE_ABSOLUTE;
                        Data.RawButtons   = MOUSE_BUTTON_1;
                        Data.ButtonFlags  = MOUSE_BUTTON_1_UP;
                        Data.UnitId       = g_UnitId ;
                        Data.LastX        = 0;
                        Data.LastY        = 0;
                    }
                    g_SeviceCallback(g_KeyboardClassDO, Data, &Data[1], &NumSend);

                    pversion = (PULONG) Irp->AssociatedIrp.SystemBuffer;
                    *pversion = iTmp;
                }
                break;
游客

返回顶部