另一个线程的SetThreadExecutionState

时间:2018-01-07 22:21:57

标签: c++ winapi

我可以使用SetThreadExecutionState()来更改我调用此函数的线程的执行状态。有没有办法调用这个(类似的)函数来改变另一个线程的执行状态,而不是我调用它的那个。

实际上,问题是我使用的一个dll文件(来自VLC库)正在调用此函数以防止显示关闭。我想禁止它这样做。我想为我的进程中的所有线程调用SetThreadExecutionState(),并从其状态中排除DISPLAY_REQUIRED标志。

如果无法为另一个线程调用此函数或类似函数,那么有没有人知道实现此目的的另一种方法?

感谢。

1 个答案:

答案 0 :(得分:2)

  

有没有办法调用这个(类似的)函数来改变另一个线程的执行状态

不直接,不。它只适用于调用它的线程。您必须单独在每个线程中调用它。如果您无法访问给定的线程(例如,DLL在内部创建的线程),则必须以某种方式注入在该线程的上下文中运行的代码。有各种注射技术可供选择。

  

我使用的一个dll文件(来自VLC库)调用此函数以防止显示关闭。我想禁止它这样做。我想为我的进程中的所有线程调用SetThreadExecutionState(),并从其状态中排除DISPLAY_REQUIRED标志。

简单地挂钩函数本身(有许多示例甚至是用于挂钩API函数的库),因此您可以在将输入参数转发到原始函数之前更改输入参数。