我正在尝试获取进程线程的快照。但是,它要么返回一个空快照,要么不填充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/

10-15 06:02