首页
社区
课程
招聘
[讨论]《windows核心编程》第四版HandShake程序的BUG
发表于: 2010-3-15 19:28 6518

[讨论]《windows核心编程》第四版HandShake程序的BUG

2010-3-15 19:28
6518

这几天看《widows核心编程》书上HandShake的代码,发现了一个问题,猜想程序可能会因此陷入死锁状态。
后经实际测试,发现这确实是一个BUG。再后来,修改了部分代码,BUG消失了。
特发出来与大家分享。有什么不对的地方,还希望大家能够指出。

widows核心编程(第4版)HandShake程序有一个BUG——

        如果在Request编辑框里输入字符串Server Shutdown,点击提交按钮,服务器线程会终止。
然后在编辑框里输入任意字符串,再次点击提交按钮时,由于服务器线程已经终止,所以事件
g_hevtResultReturned 不会被设置为通知状态,主线程陷入死锁。

本程序对其进行了改动。改动如下:
(1)主线程在提交请求之前,检查服务器线程是否已经终止。如果已经终止,则不进入等待函数。
否则,提交请求,并进入等待函数。
(2)为了让主线程能够检查服务器线程是否已经终止,将服务器线程句柄设置为全局变量。
(3)DialogBox返回之后,主线程仍然可能陷入死锁。原因同上。为此,添加检测服务器线程是否已经终止的代码。
如果服务器线程已经终止,则直接进入清理句柄步骤。
否则,发送字符串Server Shutdown,令其终止,待终止后再进入清理句柄步骤。
另一种修改方法是,只等待服务器线程终止,而不等待事件g_hevtResultReturned被设置为通知状态。

修改后的代码如下:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 440
活跃值: (87)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
3
怎么没有人关注呢?
自己顶下吧。
2010-3-17 11:13
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不是不想关注,是……《Windows核心编程》那本书把我给弄的差点疯掉……看不懂
2010-3-17 11:20
0
雪    币: 70
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
lz 看得很仔细,我来**下。
2010-3-17 11:20
0
雪    币: 287
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
在Dlg_OnCommand中似乎也该用WaitForMultipleObjects或改为等待服务线程句柄。在调用GetExitCodeThread和WaitForSingleObject之间,服务线程可能退出,虽然概率极小
2010-3-17 11:45
0
游客
登录 | 注册 方可回帖
返回
//