chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1909回复:5

应用程序和驱动程序如何通过事件通信?

楼主#
更多 发布于:2003-07-05 21:21
这是一个老问题了,我搜索了整个驱动开发网虽然有很多类似的问题,可我仍然没找到答案,包括本站的专题文章《总结应用和驱动之间用事件通讯的办法》我也照着试了,就是行不通,我是这样做的,请各位高手看看问题出在哪?

// 在驱动里:
PVOID hEvent;
PKEVENT hKernerlEvent;
case IO_DOWNLOAD_EVENT:
  hEvent = (HANDLE) Irp->AssociatedIrp.SystemBuffer;

  status = ObReferenceObjectByHandle(hEvent,
                                     GENERIC_ALL,
                                     NULL,
                                     KernelMode,
                                     &hKernerlEvent,
                                     NULL);
KeSetEvent(hKernerlEvent);

// 在应用程序里:
HANDLE m_hUserEvent = CreateEvent(NULL,
                                  false,
                                  false,
                                  NULL);
DeviceIoControl(m_hDevice,
                IO_DOWNLOAD_EVENT,
                (LPVOID)&m_hUserEvent,
                0,
                NULL,
                0,
                dwReturn,
                NULL);
WaitForSingleObject(m_hUserEvent, INFINITE);//等待事件

问题:
    应用程序在执行DeviceIoControl(...)时总是返回6,就是ERROR_INVALID_HANDLE,请问我该怎么办呢?
    有哪位高手做过这方面的程序,可以将你的源代码贴到这里吗?好让很多在这方面有困扰的人一个启发,我代表大家谢谢你啊!

最新喜欢:

sunmaculasunmac...
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-07-05 21:28
你那个DeviceIoControl的InBufferSize怎么是0啊?
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-06 11:04
你那个DeviceIoControl的InBufferSize怎么是0啊?


是的,你怎么这样做,这有问题
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-06 11:36
不好意思,在帖子中写错了,我的程序中是这样的:
DeviceIoControl(m_hDevice,
IO_DOWNLOAD_EVENT,
(LPVOID)&m_hUserEvent,
sizeof(HANDLE),
NULL,
0,
dwReturn,
NULL);
问题还是我上面说的,请问到底是怎么回事,请哪位高手将你调试成功的代码贴在这里吧,多谢了。
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
chrys
驱动小牛
驱动小牛
  • 注册日期2002-05-30
  • 最后登录2008-07-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-04 10:45
这个问题真的解决不了拉?
天才来自勤奋 知识要靠学习 [url= http://ndxz.126.com]――欢迎来我家做客――[/url]
Always!978
驱动小牛
驱动小牛
  • 注册日期2002-05-09
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-06 11:15

   你说的ERROR_INVALID_HANDLE是不是指你的m_hDevice句柄错误?
Tomorrow Never Die
游客

返回顶部