diff options
Diffstat (limited to 'sal/systools/win32/uwinapi/EnumProcesses.cpp')
-rw-r--r-- | sal/systools/win32/uwinapi/EnumProcesses.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/sal/systools/win32/uwinapi/EnumProcesses.cpp b/sal/systools/win32/uwinapi/EnumProcesses.cpp new file mode 100644 index 000000000000..b98541ff1f40 --- /dev/null +++ b/sal/systools/win32/uwinapi/EnumProcesses.cpp @@ -0,0 +1,41 @@ +#include "macros.h" +#include <tlhelp32.h> + +IMPLEMENT_THUNK( psapi, WINDOWS, BOOL, WINAPI, EnumProcesses, ( LPDWORD lpProcesses, DWORD cbSize, LPDWORD lpcbCopied ) ) +{ + BOOL fSuccess = FALSE; + HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); + + if ( IsValidHandle( hSnapshot ) ) + { + PROCESSENTRY32 pe; + + if ( lpcbCopied ) + *lpcbCopied = 0; + + pe.dwSize = sizeof(pe); + if ( Process32First( hSnapshot, &pe ) ) + { + fSuccess = TRUE; + + while ( cbSize >= sizeof(*lpProcesses) ) + { + *(lpProcesses++) = pe.th32ProcessID; + if ( lpcbCopied ) + *lpcbCopied += sizeof(*lpProcesses); + cbSize -= sizeof(*lpProcesses); + + if ( !Process32Next( hSnapshot, &pe ) ) + break; + } + } + + CloseHandle( hSnapshot ); + } + else + SetLastError( ERROR_INVALID_HANDLE ); + + return fSuccess; +} + + |