我使用“TerminateProcess(procHandle,0)”来杀死线程。它适用于大多数,但有些线程无法杀死。为什么?此外,任务管理器也无法杀死这些线程。
有没有办法强制杀死任何线程? 我还能做什么?
thx
答案 0 :(得分:1)
[...]这些场景通常是有缺陷的设备驱动程序的结果 没有正确处理未完成I / O的取消 请求。
答案 1 :(得分:1)
通常,如果您没有所需权限,则无法终止其他用户的进程。例如,无法终止作为SYSTEM用户运行的进程,终端服务器上其他用户的进程等等。
来自MSDN的引文:“句柄必须具有PROCESS_TERMINATE访问权限。有关更多信息,请参阅进程安全性和访问权限。”
答案 2 :(得分:0)
我遇到了你提到的同样的情况。
由于TerminateProcess
是异步的并且来自MSDN的The terminated process cannot exit until all pending I/O has been completed or canceled. When a process terminates, its kernel object is not destroyed until all processes that have open handles to the process have released those handles.
引用。
此外I / O等待正常情况,有两种方法可以取消IO。
CancelIo
手动取消IO。HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk\TimeOutValue