1 #include "macros.h" 2 #include <tlhelp32.h> 3 4 IMPLEMENT_THUNK( psapi, WINDOWS, BOOL, WINAPI, EnumProcesses, ( LPDWORD lpProcesses, DWORD cbSize, LPDWORD lpcbCopied ) ) 5 { 6 BOOL fSuccess = FALSE; 7 HANDLE hSnapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); 8 9 if ( IsValidHandle( hSnapshot ) ) 10 { 11 PROCESSENTRY32 pe; 12 13 if ( lpcbCopied ) 14 *lpcbCopied = 0; 15 16 pe.dwSize = sizeof(pe); 17 if ( Process32First( hSnapshot, &pe ) ) 18 { 19 fSuccess = TRUE; 20 21 while ( cbSize >= sizeof(*lpProcesses) ) 22 { 23 *(lpProcesses++) = pe.th32ProcessID; 24 if ( lpcbCopied ) 25 *lpcbCopied += sizeof(*lpProcesses); 26 cbSize -= sizeof(*lpProcesses); 27 28 if ( !Process32Next( hSnapshot, &pe ) ) 29 break; 30 } 31 } 32 33 CloseHandle( hSnapshot ); 34 } 35 else 36 SetLastError( ERROR_INVALID_HANDLE ); 37 38 return fSuccess; 39 } 40 41 42