首页
社区
课程
招聘
[求助]异步deviceiocontrol错误
发表于: 2009-4-16 21:40 7330

[求助]异步deviceiocontrol错误

2009-4-16 21:40
7330
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执行成功之后才会恢复。

请各位高手问下这个是什么原因?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 22
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
DWORD msgBoxThread( .....){
   AfxMessageBox("等待中");
}

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);
               

CreateThread( msgBoxThread, ....);

               
               
//等待受信,貌似不能成功。。。
while(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT)
{
   
}

Send a message to close your "等待中" message box.
2009-4-17 02:44
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
上面的是一种解决方法。

但是我的Msgbox是想提示我等待超时了,而不是提示当前是一直等待状态。

有其他办法么。。。
2009-4-17 09:28
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
//等待受信,貌似不能成功。。。
if(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT)
{
   
}
2009-4-17 09:32
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这条代码有问题?
2009-4-17 09:39
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
if(::WaitForSingleObject(ol.hEvent , 300) == WAIT_OBJECT_0)
{
    //是成功
   //也就好似說,有ol.hEvent 相应时,执行到这里
}

if(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT)
{
  //这样,则没有  ol.hEvent 相应,且超过300时,会走到这里
}
2009-4-17 09:52
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
//等待受信,貌似不能成功。。。
while(::WaitForSingleObject(ol.hEvent , 300) == WAIT_TIMEOUT) 
{
    AfxMessageBox("等待中");
}

这条代码就是说如果ol.hEvent未受信就一直弹出对话框。一直等到受信为止。
2009-4-17 12:11
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我的本意是如果300MS内等待超时的话,就弹出对话框一直提示。
2009-4-17 12:12
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
while(::WaitForSingleObject(ol.hEvent , 0) == WAIT_TIMEOUT)
{
    //加上时间计算时间
   //如果大于 300时跳出循环
   //否则
    AfxMessageBox("等待中");
}
2009-4-17 12:45
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你这样跟我上面写的代码没什么区别吧。。。。

现在的问题貌似是WaitForSingleObject(ol.hEvent , 0)这个等待语句不起作用
2009-4-17 13:11
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谁能帮忙解答一下啊。。。。。
2009-4-19 11:11
0
游客
登录 | 注册 方可回帖
返回
//