我对用OpenThread函数打开不同的线程和用NtQueryInformationThread本机函数检查它们感到困惑。我对NtQueryInformationThread没有问题&我可以很好地检查它们。问题是我不知道如何使用OpenThread (考虑到SetDebugPrivilege )遍历不同数量的线程。假设我们有从5100到5200的不同线程&我们想按顺序检查它们:例如5100、5101、5102、5103、5104、5105...5200...我不知道如何在delphi中正确地使用OpenThread函数。我正在使用这个语法&我发现它是错误的:
OpenThread(THREAD_ALL_ACCESS,false,(DWORD)5100)。如果有人能指导我如何使用OpenThread通过不同数量的线程,那就太好了。
非常感谢。
发布于 2010-06-01 00:21:17
我不确定你是如何获得具有严格顺序‘d的线程的,因为Windows不(必须)以任何模式获取线程’d。
如果您希望遍历一组线程,则必须使用工具帮助API:
CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0)以获取系统状态快照,并使用Thread32First和Thread32Next循环遍历线程,然后选择要使用的线程(例如。OpenThread,例如:THREAD_QUERY_INFORMATION不要使用THREAD_ALL_ACCESS,除非您在当前进程中创建了线程,并且您确切地知道自己在做什么
(如果您接触另一个进程的线程,请将自己限制为只读访问)
NtQueryInformationThread
只要不持有线程句柄,就必须处理任何线程终止(并被具有相同ID的新线程替换)的可能性。
编辑(应请求进一步澄清)
带有dwFlags == TH32CS_SNAPTHREAD的CreateToolhelp32Snapshot为您提供了当前存在的所有线程的系统范围的快照(在本例中忽略了th32ProcessID参数),而不管它们的状态如何,并且Thread32[First|Next]随后返回的THREADENTRY32结构包含th32ThreadID和th32OwnerProcessID字段,您可以使用它们来标识线程。
https://stackoverflow.com/questions/2943959
复制相似问题