使用CreateToolhelp32Snapshot的线程快照为空

使用CreateToolhelp32Snapshot的线程快照为空,c,debugging,msdn,C,Debugging,Msdn,我正在尝试获取进程线程的快照。但是,它返回的不是空快照,就是没有填充线程\u项。无论我做什么,我的值th32OwnerProcessID始终为0。你知道为什么会这样吗 stack<DWORD> enumerate_threads(){ THREADENTRY32 thread_entry; HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,proc_info_1.process_ID); if(snapshot

我正在尝试获取进程线程的快照。但是,它返回的不是空快照,就是没有填充线程\u项。无论我做什么,我的值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;
}
}
堆栈枚举线程(){
THREADENTRY32线程\u条目;
HANDLE snapshot=CreateToolhelp32Snapshot(TH32CS\u SNAPTHREAD,proc\u info\u 1.process\u ID);
if(快照!=无效的\u句柄\u值){
thread_entry.dwSize=sizeof(thread_entry);
bool success=Thread32First(快照和线程\u条目);
while(success==true){
msg(“获取线程快照”);
if(thread\u entry.th32OwnerProcessID==proc\u info\u 1.process\u ID){
msg(“将线程添加到列表中”);
thread\u list.push(thread\u entry.th32ThreadID);
success=Thread32Next(快照和线程\u条目);
}
CloseHandle(快照);
返回线程列表;
}
}否则{
错误(“无法获取快照”);
返回线程列表;
}
}

在调用
CreateToolhelp32Snapshot
之前,您应该将
THREADENTRY32
结构的
dwSize
字段分配到此结构的大小。是否尝试获取本地进程或其他进程的快照?看不出它为什么不工作。尝试使用GetCurrentProcessId()获取进程id(应该是DWORD)Oops,但通知您错误。我不知道为什么我说这是当地的过程。这是另一个过程。