我对使用OpenThread函数打开不同的线程并使用NtQueryInformationThread
本机函数检查它们感到困惑。
我对NtQueryInformationThread
&我可以很好地检查它们。
问题是我不知道如何使用OpenThread
循环遍历不同数量的线程
(使用SetDebugPrivilege注意事项)。
假设我们有不同的线程,从5100到5200&我们想要按顺序检查它们:例如5100,5101,5102,5103,5104,5105 ...... 5200 ....
我不知道如何以正确的方式在delphi中使用OpenThread
函数....
我正在使用这种语法&我发现错了:
OpenThread(THREAD_ALL_ACCESS,false,(DWORD)5100)
。 如果有人能指导我如何使用OpenThread虽然线程数不同,那就太棒了。
非常感谢。
答案 0 :(得分:3)
我不确定你是如何获得具有严格顺序ID的线程的,因为Windows不会(必须)以任何模式分配线程ID。
如果要遍历一组线程,则必须使用工具帮助API:
CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)
以获取系统状态快照Thread32First
和Thread32Next
遍历线程并选择要使用的线程(例如,通过其进程的ID)OpenThread
和适当的访问掩码,例如。 THREAD_QUERY_INFORMATION
THREAD_ALL_ACCESS
,除非您在当前流程中创建了线程,并且您确切知道自己在做什么
(如果你触摸另一个进程的线程,请限制自己进行只读访问)NtQueryInformationThread
CloseHandle
只要不保存线程句柄,就必须处理任何线程终止(并用具有相同ID的新线程替换)的可能性。
修改(根据要求进一步澄清)
带有CreateToolhelp32Snapshot
的{{1}}为您提供当前所有线程现有的系统范围快照(在这种情况下忽略dwFlags == TH32CS_SNAPTHREAD
参数),无论他们的状态以及th32ProcessID
随后返回的THREADENTRY32
结构包含Thread32[First|Next]
和th32ThreadID
字段,您可以使用这些字段来标识该主题。