HANDLE hFile = = CreateFile(this->m_linkname , GENERIC_READ ,
0 , NULL , OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
OVERLAPPED ol = {0};
ol.hEvent = ::CreateEvent(NULL , FALSE , FALSE , NULL);
::DeviceIoControl(hFile , TESTDRIVER, 0 , NULL,
buf , 4 , &dwRet , &ol);
//等待受信,貌似不能成功
while(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT) 
{
AfxMessageBox("等待中");
}
在WaitForSingleObject的时候不会弹出对话框,貌似线程阻塞住了,一直等到DeviceIoControl执行成功之后才会恢复。请问下这个是什么原因

解决方案 »

  1.   

    把DeviceIoControl放到另一个线程去执行,WaitForSingleObject 在当前线程等待...
      

  2.   

    DeviceIoControl() 要等待,放到其他线程,你的主线程就可以继续干别的,等它返回以后,再处理,你主线程不一定要WaitForSingleObject  一直等待..
      

  3.   


    DeviceIoControl已然是在另一个线程中的了。现在的要解决的问题是,DeviceIoControl异步为什么会失败
      

  4.   

    这是驱动程序的问题,调试驱动程序的IRP_MJ_DEVICE_CONTROL主函数。
      

  5.   


    又见偶像了^_^你的意思是不是说IRP_MJ_DEVICE_CONTROL中需要提供一种异步的通信方式才行?