由于学习的需要,前一段时间在焦点上找到了“一种新的穿透防火墙的数据传输技术”这篇文章,觉得思路很好,同时又有源代码示例,于是就使用原文所给出的实例代码进行了编译测试,虽然编译可以顺利的通过,但是我发现编译出来的程序却无法达到预期的效果,在运行程序时总是得到:GetSocketFromId Wrong的提示,于是我对程序进行单步的调试,发现在函数
SOCKET GetSocketFromId (DWORD PID)中
NumOfHandle = *(ULONG*)buf;
h_info = ( PSYSTEM_HANDLE_INFORMATION )((ULONG)buf+4);
for(i = 0; i<NumOfHandle ;i++)
{
try
{
if( ( h_info[i].ProcessId == PID )
&& ( h_info[i].ObjectTypeNumber == 0x1c )
&& (h_info[i].Handle != 0x2c)
.................................
if这个判断条件永远为假,因为h_info[i].ProcessId == PID是恒不成立的。
在我的调试(环境是VC++ 6.0 + Windows XP和Windows 2003)中,随着i值的增加,
h_info[i].ProcessId这个值保持不变,一直为4。
我想原文作者应该是在他的系统上调试通过后才把自己的文章发出来的,可能是由于我的操作系统
或者编译系统的自身的问题才出现这种情况的吧。但无论如何,这篇文章在互联网上已经被大量转载
,我想,在转载这篇文章的时候,绝大多数人都没有对他进行实际的编译测试,否则,对于这篇文章中
出现的这种问题早就被发现了。可见,很多网站的管理员和编程人员在对待技术问题的态度上是不严格的。态度决定一切!做任何事情没有一个好的态度是不可能把事情做到更完美的。真希望这样的事情以后在互联网上少一些,对他人负责,也对自己负责。