阅读:1909回复:5
应用程序和驱动程序如何通过事件通信?
这是一个老问题了,我搜索了整个驱动开发网虽然有很多类似的问题,可我仍然没找到答案,包括本站的专题文章《总结应用和驱动之间用事件通讯的办法》我也照着试了,就是行不通,我是这样做的,请各位高手看看问题出在哪?
// 在驱动里: 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,请问我该怎么办呢? 有哪位高手做过这方面的程序,可以将你的源代码贴到这里吗?好让很多在这方面有困扰的人一个启发,我代表大家谢谢你啊! |
|
最新喜欢:![]()
|
沙发#
发布于:2003-07-05 21:28
你那个DeviceIoControl的InBufferSize怎么是0啊?
|
|
板凳#
发布于:2003-07-06 11:04
你那个DeviceIoControl的InBufferSize怎么是0啊? 是的,你怎么这样做,这有问题 |
|
|
地板#
发布于:2003-07-06 11:36
不好意思,在帖子中写错了,我的程序中是这样的:
DeviceIoControl(m_hDevice, IO_DOWNLOAD_EVENT, (LPVOID)&m_hUserEvent, sizeof(HANDLE), NULL, 0, dwReturn, NULL); 问题还是我上面说的,请问到底是怎么回事,请哪位高手将你调试成功的代码贴在这里吧,多谢了。 |
|
|
地下室#
发布于:2003-08-04 10:45
这个问题真的解决不了拉?
|
|
|
5楼#
发布于:2003-08-06 11:15
你说的ERROR_INVALID_HANDLE是不是指你的m_hDevice句柄错误? |
|
|