6 * Process Status Helper API, native interface
8 * This file is part of the ReactOS Operating System.
11 * Created by KJK::Hyperion <noog@libero.it>
13 * THIS SOFTWARE IS NOT COPYRIGHTED
15 * This source code is offered for use in the public domain. You may
16 * use, modify or distribute it freely.
18 * This code is distributed in the hope that it will be useful but
19 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
20 * DISCLAMED. This includes but is not limited to warranties of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
25 #ifndef __EPSAPI_H_INCLUDED__
26 #define __EPSAPI_H_INCLUDED__
29 #include <ntdll/ldr.h> /* FIXME: USE LDR_DATA_TABLE_ENTRY */
34 typedef NTSTATUS (NTAPI
*PPROC_ENUM_ROUTINE
)(IN PSYSTEM_PROCESS_INFORMATION CurrentProcess
,
35 IN OUT PVOID CallbackContext
);
37 typedef NTSTATUS (NTAPI
*PTHREAD_ENUM_ROUTINE
)(IN PSYSTEM_THREAD_INFORMATION CurrentThread
,
38 IN OUT PVOID CallbackContext
);
40 typedef NTSTATUS (NTAPI
*PSYSMOD_ENUM_ROUTINE
)(IN PSYSTEM_MODULE_INFORMATION_ENTRY CurrentModule
,
41 IN OUT PVOID CallbackContext
);
43 typedef NTSTATUS (NTAPI
*PPROCMOD_ENUM_ROUTINE
)(IN HANDLE ProcessHandle
,
44 IN PLDR_MODULE CurrentModule
,
45 IN OUT PVOID CallbackContext
);
48 #define FAILED_WITH_STATUS DEFINE_DBG_MSG("%s() failed, status 0x%08X")
51 /* Processes and threads */
54 PsaEnumerateProcessesAndThreads(IN PPROC_ENUM_ROUTINE ProcessCallback
,
55 IN OUT PVOID ProcessCallbackContext
,
56 IN PTHREAD_ENUM_ROUTINE ThreadCallback
,
57 IN OUT PVOID ThreadCallbackContext
);
60 PsaEnumerateProcesses(IN PPROC_ENUM_ROUTINE Callback
,
61 IN OUT PVOID CallbackContext
);
64 PsaEnumerateThreads(IN PTHREAD_ENUM_ROUTINE Callback
,
65 IN OUT PVOID CallbackContext
);
67 /* capturing & walking */
69 PsaCaptureProcessesAndThreads(OUT PSYSTEM_PROCESS_INFORMATION
* ProcessesAndThreads
);
72 PsaWalkProcessesAndThreads(IN PSYSTEM_PROCESS_INFORMATION ProcessesAndThreads
,
73 IN PPROC_ENUM_ROUTINE ProcessCallback
,
74 IN OUT PVOID ProcessCallbackContext
,
75 IN PTHREAD_ENUM_ROUTINE ThreadCallback
,
76 IN OUT PVOID ThreadCallbackContext
);
79 PsaWalkProcesses(IN PSYSTEM_PROCESS_INFORMATION ProcessesAndThreads
,
80 IN PPROC_ENUM_ROUTINE Callback
,
81 IN OUT PVOID CallbackContext
);
84 PsaWalkThreads(IN PSYSTEM_PROCESS_INFORMATION ProcessesAndThreads
,
85 IN PTHREAD_ENUM_ROUTINE Callback
,
86 IN OUT PVOID CallbackContext
);
88 PSYSTEM_PROCESS_INFORMATION FASTCALL
89 PsaWalkFirstProcess(IN PSYSTEM_PROCESS_INFORMATION ProcessesAndThreads
);
91 PSYSTEM_PROCESS_INFORMATION FASTCALL
92 PsaWalkNextProcess(IN PSYSTEM_PROCESS_INFORMATION CurrentProcess
);
94 PSYSTEM_THREAD_INFORMATION FASTCALL
95 PsaWalkFirstThread(IN PSYSTEM_PROCESS_INFORMATION CurrentProcess
);
97 PSYSTEM_THREAD_INFORMATION FASTCALL
98 PsaWalkNextThread(IN PSYSTEM_THREAD_INFORMATION CurrentThread
);
103 PsaEnumerateSystemModules(IN PSYSMOD_ENUM_ROUTINE Callback
,
104 IN OUT PVOID CallbackContext
);
106 /* capturing & walking */
108 PsaCaptureSystemModules(OUT PSYSTEM_MODULE_INFORMATION
* SystemModules
);
111 PsaWalkSystemModules(IN PSYSTEM_MODULE_INFORMATION SystemModules
,
112 IN PSYSMOD_ENUM_ROUTINE Callback
,
113 IN OUT PVOID CallbackContext
);
115 PSYSTEM_MODULE_INFORMATION_ENTRY FASTCALL
116 PsaWalkFirstSystemModule(IN PSYSTEM_MODULE_INFORMATION SystemModules
);
118 PSYSTEM_MODULE_INFORMATION_ENTRY FASTCALL
119 PsaWalkNextSystemModule(IN PSYSTEM_MODULE_INFORMATION CurrentSystemModule
);
121 /* Process modules */
123 PsaEnumerateProcessModules(IN HANDLE ProcessHandle
,
124 IN PPROCMOD_ENUM_ROUTINE Callback
,
125 IN OUT PVOID CallbackContext
);
129 PsaFreeCapture(IN PVOID Capture
);
131 /* The user must define these functions. They are called by PSAPI to allocate
132 memory. This allows PSAPI to be called from any environment */
133 void *PsaiMalloc(SIZE_T size
);
134 void *PsaiRealloc(void *ptr
, SIZE_T size
);
135 void PsaiFree(void *ptr
);
138 #define DEFINE_DBG_MSG(__str__) "PSAPI: " __str__ "\n"
140 #endif /* __EPSAPI_H_INCLUDED__ */