windows 2000 的 bug? 不小心写了一个无法被任务管理器杀死的普通进程(100分)

  • 主题发起人 主题发起人 Another_eYes
  • 开始时间 开始时间
A

Another_eYes

Unregistered / Unconfirmed
GUEST, unregistred user!
最近在调试程序时偶尔发现这个问题。经过分析,发觉是APC的问题。如果在APC过程中程序产生异常(有用try ... except),尽管不会弹出错误对话框,但线程还是会死掉。此时就会产生用任务管理器无法杀死进程的问题。杀进程时windows会报错,大概是什么“无效ID”之类的错误信息,然后便无法杀死进程,而此时进程中其它线程(包括主线程)运行一切正常。不知这是不是windows 2000的一个bug。
现在可以确认的是肯定是APC调用的问题,但不确定的是普通用户APC调用就会出现该问题还是只有重叠端口的completion routine会产生该问题。
如果利用这个bug来做病毒或木马。。。。。。
呵呵
 
APc是什么?
少写几个字都不行!!!!
 
application-defined completion routine.
通过QueueUserAPC可以在线程的APC队列中添加一个异步调用的回调过程。一般在线程中调用WaitForSingleObjectEx,WaitForMultipleObjectsEx并且指定bAlertable=TRUE时,系统会在线程进入等待状态时在内核模式下调用你投递的APC过程,调用完成后waitxxxx会返回WAIT_IO_COMPLETION。重叠端口的完成例程用的就是APC。
 
后退
顶部