From 74fad234873bfb83831ee221ca38a45e8eb94cc8 Mon Sep 17 00:00:00 2001 From: "Stephen D. Huston" Date: Tue, 24 Feb 2009 22:14:51 +0000 Subject: Implement process id and name methods for Windows git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@747577 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/sys/windows/SystemInfo.cpp | 35 +++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) (limited to 'cpp/src') diff --git a/cpp/src/qpid/sys/windows/SystemInfo.cpp b/cpp/src/qpid/sys/windows/SystemInfo.cpp index dc5c56b6fb..3e2fcb1517 100755 --- a/cpp/src/qpid/sys/windows/SystemInfo.cpp +++ b/cpp/src/qpid/sys/windows/SystemInfo.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #ifndef HOST_NAME_MAX # define HOST_NAME_MAX 256 @@ -155,25 +156,43 @@ void SystemInfo::getSystemId (std::string &osName, machine = "unknown"; break; } +} uint32_t SystemInfo::getProcessId() { - // TODO: Provide Windows implementation - return 0; + return static_cast(::GetCurrentProcessId()); } uint32_t SystemInfo::getParentProcessId() { - // TODO: Provide Windows implementation - return 0; + // Only want info for the current process, so ask for something specific. + // The module info won't be used here but it keeps the snapshot limited to + // the current process so a search through all processes is not needed. + HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0); + if (snap == INVALID_HANDLE_VALUE) + return 0; + PROCESSENTRY32 entry; + entry.dwSize = sizeof(entry); + if (!Process32First(snap, &entry)) + entry.th32ParentProcessID = 0; + CloseHandle(snap); + return static_cast(entry.th32ParentProcessID); } std::string SystemInfo::getProcessName() { - // TODO: Provide Windows implementation - return std::string(); -} - + // Only want info for the current process, so ask for something specific. + // The module info won't be used here but it keeps the snapshot limited to + // the current process so a search through all processes is not needed. + HANDLE snap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0); + if (snap == INVALID_HANDLE_VALUE) + return 0; + PROCESSENTRY32 entry; + entry.dwSize = sizeof(entry); + if (!Process32First(snap, &entry)) + entry.szExeFile[0] = '\0'; + CloseHandle(snap); + return std::string(entry.szExeFile); } }} // namespace qpid::sys -- cgit v1.2.1