wildcatstar
驱动牛犊
驱动牛犊
  • 注册日期2006-06-23
  • 最后登录2010-05-20
  • 粉丝0
  • 关注0
  • 积分191分
  • 威望31点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
阅读:1095回复:0

驱动与应用程序通信的问题

楼主#
更多 发布于:2008-06-03 10:55

当键盘按下时我在驱动里面用事件通知应用程序,

      KeSetEvent(g_DriverObject.DriverEvent, IO_NO_INCREMENT, FALSE);
    KeClearEvent(g_DriverObject.DriverEvent);

应用程序中用一个循环Wait。
当按键速度慢的时候没有问题,但是当按键频率快的时候,会发现有的事件丢失了。
如果打印消息出来,驱动中KeSetEvent调用3次,但是程序里面只接收到2次。
所以在把一个键按住一段时间再放开,有时候会收不到按键放开的消息。
但是驱动里面是调用了的。

HEvent := OpenEvent(Windows.SYNCHRONIZE, false, 'MonitorDriverEvent');
  try
    while not Terminated do
    begin
      if (WaitForSingleObject(HEvent, 1000) = WAIT_OBJECT_0) then
      begin
        DeviceIoControl(HFile, CTL_CODE($801), nil, 0, @Data, 100, Byts, nil);
        //SendMessage(MainHandle, WM_UserKEY, Data[1], Data[2]);
        OutputDebugString(PChar(Format('Key %d flag %d', [Data[1], Data[2]])));
      end;
    end;
  finally
    closehandle(HEvent);
end;
请问这个问题应该怎么解决呢?
游客

返回顶部