我正在尝试获取进程线程的快照。但是,它要么返回一个空快照,要么不填充thread_entry。无论我做什么,我的值th32OwnerProcessID始终为0。关于为什么会发生这种情况的任何想法?
stack<DWORD> enumerate_threads(){
THREADENTRY32 thread_entry;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,proc_info_1.process_ID);
if(snapshot != INVALID_HANDLE_VALUE){
thread_entry.dwSize = sizeof(thread_entry);
bool success = Thread32First(snapshot,&thread_entry);
while(success == true){
msg("Got thread snapshot");
if(thread_entry.th32OwnerProcessID == proc_info_1.process_ID){
msg("Adding thread to list.");
thread_list.push(thread_entry.th32ThreadID);
success = Thread32Next(snapshot,&thread_entry);
}
CloseHandle(snapshot);
return thread_list;
}
} else {
err("Could not obtain snapshot");
return thread_list;
}
}
最佳答案
在调用dwSize
之前,应将THREADENTRY32
结构的CreateToolhelp32Snapshot
字段分配给此结构的大小。
关于c - 使用CreateToolhelp32Snapshot的线程快照为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21964069/