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