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