xref: /trunk/main/sal/systools/win32/uwinapi/EnumProcesses.cpp (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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