1 /*
2 * test.h
3 *
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.
7 *
8 * THIS SOFTWARE IS NOT COPYRIGHTED
9 *
10 * This source code is offered for use in the public domain. You may
11 * use, modify or distribute it freely.
12 *
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.
17 *
18 */
19
20 #ifndef __INTERNAL_PSAPI_H_INCLUDED__
21 #define __INTERNAL_PSAPI_H_INCLUDED__
22
23 void *_lfind(const void* match, const void* start,unsigned int* array_size, unsigned int elem_size,int (*cf)(const void*,const void*));
24
NtCurrentTeb(void)25 static inline struct _TEB * NtCurrentTeb(void)
26 {
27 struct _TEB * pTeb;
28
29 /* FIXME: instead of hardcoded offsets, use offsetof() - if possible */
30 __asm__ __volatile__
31 (
32 "movl %%fs:0x18, %0\n" /* fs:18h == Teb->Tib.Self */
33 : "=r" (pTeb) /* can't have two memory operands */
34 : /* no inputs */
35 );
36
37 return pTeb;
38 }
39
40 typedef struct tagFOO
41 {
42 INT lonibble : 4;
43 INT hinibble : 4;
44 } FOO, *PFOO, FAR *LPFOO;
45
46 /* INCLUDES */
47 #define NTOS_MODE_USER
48 #include <ntos.h>
49
50 /* OBJECTS */
51 typedef struct
52 {
53 LPSTR LeftVolumeName;
54 LPSTR RightVolumeName;
55 ULONG DefaultVolume;
56 ULONG Type;
57 ULONG DeviceType;
58 char Key[4];
59 LPSTR PrototypeName;
60 PVOID DeferredRoutine;
61 PVOID ExclusionRoutine;
62 PVOID DispatchRoutine;
63 PVOID DevCapsRoutine;
64 PVOID HwSetVolume;
65 ULONG IoMethod;
66 }SOUND_DEVICE_INIT;
67
68 /* TYPES */
69 typedef NTSTATUS NTAPI (*PPROC_ENUM_ROUTINE)
70 (
71 IN PSYSTEM_PROCESSES CurrentProcess,
72 IN OUT PVOID CallbackContext
73 );
74
75 typedef NTSTATUS NTAPI (*PTHREAD_ENUM_ROUTINE)
76 (
77 IN PSYSTEM_THREADS CurrentThread,
78 IN OUT PVOID CallbackContext
79 );
80
81 typedef NTSTATUS NTAPI (*PSYSMOD_ENUM_ROUTINE)
82 (
83 IN PSYSTEM_MODULE_INFORMATION_ENTRY CurrentModule,
84 IN OUT PVOID CallbackContext
85 );
86
87 typedef NTSTATUS NTAPI (*PPROCMOD_ENUM_ROUTINE)
88 (
89 IN HANDLE ProcessHandle,
90 IN PLDR_DATA_TABLE_ENTRY CurrentModule,
91 IN OUT PVOID CallbackContext
92 );
93
94 /* CONSTANTS */
95 #define FAILED_WITH_STATUS DEFINE_DBG_MSG("%s() failed, status 0x%08X")
96
97 /* PROTOTYPES */
98 /* Processes and threads */
99 /* enumeration */
100 NTSTATUS
101 NTAPI
102 PsaEnumerateProcessesAndThreads
103 (
104 IN PPROC_ENUM_ROUTINE ProcessCallback,
105 IN OUT PVOID ProcessCallbackContext,
106 IN PTHREAD_ENUM_ROUTINE ThreadCallback,
107 IN OUT PVOID ThreadCallbackContext
108 );
109
110 NTSTATUS
111 NTAPI
112 PsaEnumerateProcesses
113 (
114 IN PPROC_ENUM_ROUTINE Callback,
115 IN OUT PVOID CallbackContext
116 );
117
118 NTSTATUS
119 NTAPI
120 PsaEnumerateThreads
121 (
122 IN PTHREAD_ENUM_ROUTINE Callback,
123 IN OUT PVOID CallbackContext
124 );
125
126 /* capturing & walking */
127 NTSTATUS
128 NTAPI
129 PsaCaptureProcessesAndThreads
130 (
131 OUT PSYSTEM_PROCESSES * ProcessesAndThreads
132 );
133
134 NTSTATUS
135 NTAPI
136 PsaWalkProcessesAndThreads
137 (
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
143 );
144
145 NTSTATUS
146 NTAPI
147 PsaWalkProcesses
148 (
149 IN PSYSTEM_PROCESSES ProcessesAndThreads,
150 IN PPROC_ENUM_ROUTINE Callback,
151 IN OUT PVOID CallbackContext
152 );
153
154 NTSTATUS
155 NTAPI
156 PsaWalkThreads
157 (
158 IN PSYSTEM_PROCESSES ProcessesAndThreads,
159 IN PTHREAD_ENUM_ROUTINE Callback,
160 IN OUT PVOID CallbackContext
161 );
162
163 PSYSTEM_PROCESSES
164 FASTCALL
165 PsaWalkFirstProcess
166 (
167 IN PSYSTEM_PROCESSES ProcessesAndThreads
168 );
169
170 PSYSTEM_PROCESSES
171 FASTCALL
172 PsaWalkNextProcess
173 (
174 IN PSYSTEM_PROCESSES CurrentProcess
175 );
176
177 PSYSTEM_THREADS
178 FASTCALL
179 PsaWalkFirstThread
180 (
181 IN PSYSTEM_PROCESSES CurrentProcess
182 );
183
184 PSYSTEM_THREADS
185 FASTCALL
186 PsaWalkNextThread
187 (
188 IN PSYSTEM_THREADS CurrentThread
189 );
190
191 /* System modules */
192 /* enumeration */
193 NTSTATUS
194 NTAPI
195 PsaEnumerateSystemModules
196 (
197 IN PSYSMOD_ENUM_ROUTINE Callback,
198 IN OUT PVOID CallbackContext
199 );
200
201 /* capturing & walking */
202 NTSTATUS
203 NTAPI
204 PsaCaptureSystemModules
205 (
206 OUT PSYSTEM_MODULE_INFORMATION * SystemModules
207 );
208
209 NTSTATUS
210 NTAPI
211 PsaWalkSystemModules
212 (
213 IN PSYSTEM_MODULE_INFORMATION SystemModules,
214 IN PSYSMOD_ENUM_ROUTINE Callback,
215 IN OUT PVOID CallbackContext
216 );
217
218 PSYSTEM_MODULE_INFORMATION_ENTRY
219 FASTCALL
220 PsaWalkFirstSystemModule
221 (
222 IN PSYSTEM_MODULE_INFORMATION SystemModules
223 );
224
225 PSYSTEM_MODULE_INFORMATION_ENTRY
226 FASTCALL
227 PsaWalkNextSystemModule
228 (
229 IN PSYSTEM_MODULE_INFORMATION CurrentSystemModule
230 );
231
232 /* Process modules */
233 NTSTATUS
234 NTAPI
235 PsaEnumerateProcessModules
236 (
237 IN HANDLE ProcessHandle,
238 IN PPROCMOD_ENUM_ROUTINE Callback,
239 IN OUT PVOID CallbackContext
240 );
241
242 /* Miscellaneous */
243 VOID
244 NTAPI
245 PsaFreeCapture
246 (
247 IN PVOID Capture
248 );
249
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);
255
256 /* MACROS */
257 #define DEFINE_DBG_MSG(__str__) "PSAPI: " __str__ "\n"
258
259 #endif /* __INTERNAL_PSAPI_H_INCLUDED__ */
260
261 /* EOF */
262