#include #include #include int __cdecl wmain(int argc, char** argv) //int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { std::vector handles; std::cout << "Enter pid: "; DWORD pid; std::cin >> pid; HANDLE hProc = OpenProcess(PROCESS_DUP_HANDLE, FALSE, pid); if(hProc) { std::back_insert_iterator > inserter(handles); WinLib::SystemInfo::GetProcessHandleTable(pid, inserter); for(std::vector::iterator iter = handles.begin(); iter != handles.end(); ++iter) { HANDLE hObj = NULL; if(DuplicateHandle(hProc, (HANDLE)iter->Handle, GetCurrentProcess(), &hObj, READ_CONTROL, FALSE, 0)) { std::cout << "Processing handle 0x" << std::hex << iter->Handle << std::dec << '\n'; std::wstring name; WinLib::SystemInfo::GetHandleType(hObj, name); std::wcout << L"Type: " << (USHORT)iter->ObjectTypeNumber << L'(' << name << L')'; name.clear(); WinLib::SystemInfo::GetHandleName(hObj, name); std::wcout << L", Name: " << name << "\n\n"; CloseHandle(hObj); } else { DWORD err = GetLastError(); std::cout << "DuplicateHandle failed for handle 0x" << std::hex << iter->Handle << std::dec << " (type = " << (USHORT)iter->ObjectTypeNumber << ") with error " << err << '\n'; } } } else { DWORD err = GetLastError(); std::cout << "OpenProcess failed with " << err << '\n'; } return 0; }