阅读:1449回复:2
用DS得驱动程序与应用程序的通信(抛砖引玉)
用DS做了一个驱动,看到有人问这类问题,写一下经验,抛砖引玉了:)
首先要在你的设备类中增加一个KEvent类:KEvent *m_pEvent;在适当的时候掉用set成员函数(注意如果是要在中断中调用,那应该放在DPC中):if (m_pEvent){m_pEvent->Set();} 要加一个在I/O控制函数,关键代码如下: NTSTATUS status = STATUS_SUCCESS; HANDLE hEvent = *(HANDLE*)I.IoctlBuffer();//从应用程序接收句柄 if (m_pEvent != NULL) delete m_pEvent;//判定 m_pEvent = new(NonPagedPool)KEvent(hEvent,OBJECT_TYPE_ALL_ACCESS);//注意是非分页内存 return status; 在应用程序中要做下面的工作: HANDLE m_hEvent; m_hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); if (m_hEvent == INVALID_HANDLE_VALUE) { CloseHandle(m_hEvent); return INVALID_HANDLE_VALUE; } if (!DeviceIoControl(DeviceHandle,(I/O控制代码),&m_hEvent,sizeof(m_hEvent),NULL,0,&nByteRead,NULL)) { CloseHandle(m_hEvent); return INVALID_HANDLE_VALUE; } 在一个循环中等待信号就基本上ok了 |
|
沙发#
发布于:2005-07-21 12:33
沙发自己座
|
|
板凳#
发布于:2005-07-21 16:03
还可以用异步DeviceIoControl。
|
|