4 * This file is a combination of a couple different headers
5 * from ReactOS's include/ folder, and a little bit of custom
6 * hacking as well for the purpose of testing sdkparse.
8 * THIS SOFTWARE IS NOT COPYRIGHTED
10 * This source code is offered for use in the public domain. You may
11 * use, modify or distribute it freely.
13 * This code is distributed in the hope that it will be useful but
14 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
15 * DISCLAMED. This includes but is not limited to warranties of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 #ifndef __INTERNAL_PSAPI_H_INCLUDED__
21 #define __INTERNAL_PSAPI_H_INCLUDED__
23 void *_lfind(const void* match
, const void* start
,unsigned int* array_size
, unsigned int elem_size
,int (*cf
)(const void*,const void*));
25 static inline struct _TEB
* NtCurrentTeb(void)
29 /* FIXME: instead of hardcoded offsets, use offsetof() - if possible */
32 "movl %%fs:0x18, %0\n" /* fs:18h == Teb->Tib.Self */
33 : "=r" (pTeb
) /* can't have two memory operands */
44 } FOO
, *PFOO
, FAR
*LPFOO
;
47 #define NTOS_MODE_USER
54 LPSTR RightVolumeName
;
60 PVOID DeferredRoutine
;
61 PVOID ExclusionRoutine
;
62 PVOID DispatchRoutine
;
69 typedef NTSTATUS
NTAPI (*PPROC_ENUM_ROUTINE
)
71 IN PSYSTEM_PROCESSES CurrentProcess
,
72 IN OUT PVOID CallbackContext
75 typedef NTSTATUS
NTAPI (*PTHREAD_ENUM_ROUTINE
)
77 IN PSYSTEM_THREADS CurrentThread
,
78 IN OUT PVOID CallbackContext
81 typedef NTSTATUS
NTAPI (*PSYSMOD_ENUM_ROUTINE
)
83 IN PSYSTEM_MODULE_INFORMATION_ENTRY CurrentModule
,
84 IN OUT PVOID CallbackContext
87 typedef NTSTATUS
NTAPI (*PPROCMOD_ENUM_ROUTINE
)
89 IN HANDLE ProcessHandle
,
90 IN PLDR_DATA_TABLE_ENTRY CurrentModule
,
91 IN OUT PVOID CallbackContext
95 #define FAILED_WITH_STATUS DEFINE_DBG_MSG("%s() failed, status 0x%08X")
98 /* Processes and threads */
102 PsaEnumerateProcessesAndThreads
104 IN PPROC_ENUM_ROUTINE ProcessCallback
,
105 IN OUT PVOID ProcessCallbackContext
,
106 IN PTHREAD_ENUM_ROUTINE ThreadCallback
,
107 IN OUT PVOID ThreadCallbackContext
112 PsaEnumerateProcesses
114 IN PPROC_ENUM_ROUTINE Callback
,
115 IN OUT PVOID CallbackContext
122 IN PTHREAD_ENUM_ROUTINE Callback
,
123 IN OUT PVOID CallbackContext
126 /* capturing & walking */
129 PsaCaptureProcessesAndThreads
131 OUT PSYSTEM_PROCESSES
* ProcessesAndThreads
136 PsaWalkProcessesAndThreads
138 IN PSYSTEM_PROCESSES ProcessesAndThreads
,
139 IN PPROC_ENUM_ROUTINE ProcessCallback
,
140 IN OUT PVOID ProcessCallbackContext
,
141 IN PTHREAD_ENUM_ROUTINE ThreadCallback
,
142 IN OUT PVOID ThreadCallbackContext
149 IN PSYSTEM_PROCESSES ProcessesAndThreads
,
150 IN PPROC_ENUM_ROUTINE Callback
,
151 IN OUT PVOID CallbackContext
158 IN PSYSTEM_PROCESSES ProcessesAndThreads
,
159 IN PTHREAD_ENUM_ROUTINE Callback
,
160 IN OUT PVOID CallbackContext
167 IN PSYSTEM_PROCESSES ProcessesAndThreads
174 IN PSYSTEM_PROCESSES CurrentProcess
181 IN PSYSTEM_PROCESSES CurrentProcess
188 IN PSYSTEM_THREADS CurrentThread
195 PsaEnumerateSystemModules
197 IN PSYSMOD_ENUM_ROUTINE Callback
,
198 IN OUT PVOID CallbackContext
201 /* capturing & walking */
204 PsaCaptureSystemModules
206 OUT PSYSTEM_MODULE_INFORMATION
* SystemModules
213 IN PSYSTEM_MODULE_INFORMATION SystemModules
,
214 IN PSYSMOD_ENUM_ROUTINE Callback
,
215 IN OUT PVOID CallbackContext
218 PSYSTEM_MODULE_INFORMATION_ENTRY
220 PsaWalkFirstSystemModule
222 IN PSYSTEM_MODULE_INFORMATION SystemModules
225 PSYSTEM_MODULE_INFORMATION_ENTRY
227 PsaWalkNextSystemModule
229 IN PSYSTEM_MODULE_INFORMATION CurrentSystemModule
232 /* Process modules */
235 PsaEnumerateProcessModules
237 IN HANDLE ProcessHandle
,
238 IN PPROCMOD_ENUM_ROUTINE Callback
,
239 IN OUT PVOID CallbackContext
250 /* The user must define these functions. They are called by PSAPI to allocate
251 memory. This allows PSAPI to be called from any environment */
252 void *PsaiMalloc(SIZE_T size
);
253 void *PsaiRealloc(void *ptr
, SIZE_T size
);
254 void PsaiFree(void *ptr
);
257 #define DEFINE_DBG_MSG(__str__) "PSAPI: " __str__ "\n"
259 #endif /* __INTERNAL_PSAPI_H_INCLUDED__ */