|
1
12
是的,QueueUserAPC不是这里的解决方案。它的回调仅在线程阻塞且程序员明确允许等待发出警报时运行。那不太可能。 我不太愿意发布解决方案,因为它会给你带来巨大的麻烦。可以使用SuspendThread()、GetThreadContext()、SetThreadContext()和ResumeThread()实现线程中断。关键是在线程的调用堆栈上保存CONTEXT.Eip值,并用中断函数的地址替换它。
线程必须处于已知状态才能安全运行注入的代码。传统的方法以前已经被多次提到:当线程在泵送消息时,消息循环隐式地处于空闲状态,并且没有做任何危险的事情。QueueUserAPC有相同的方法,线程显式地向操作系统发出信号,表明它是可以安全执行回调的状态。通过阻塞(不执行危险代码)和设置可打捆标志。 线程必须明确表示它处于安全状态。没有安全推送模式,只有拉动模式。 |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 1 年前 |
|
|
András Takács · Python多线程错误 1 年前 |