Enhanced memory managment
[reactos.git] / reactos / include / ddk / pstypes.h
1 #ifndef __INCLUDE_DDK_PSTYPES_H
2 #define __INCLUDE_DDK_PSTYPES_H
3
4 #include <kernel32/heap.h>
5 #include <kernel32/atom.h>
6 #include <internal/hal.h>
7
8 #ifndef TLS_MINIMUM_AVAILABLE
9 #define TLS_MINIMUM_AVAILABLE (64)
10 #endif
11 #ifndef MAX_PATH
12 #define MAX_PATH (260)
13 #endif
14
15 typedef NTSTATUS (*PKSTART_ROUTINE)(PVOID StartContext);
16
17 typedef struct _STACK_INFORMATION
18 {
19 PVOID BaseAddress;
20 PVOID UpperAddress;
21 } STACK_INFORMATION, *PSTACK_INFORMATION;
22
23 typedef struct linux_sigcontext {
24 int sc_gs;
25 int sc_fs;
26 int sc_es;
27 int sc_ds;
28 int sc_edi;
29 int sc_esi;
30 int sc_ebp;
31 int sc_esp;
32 int sc_ebx;
33 int sc_edx;
34 int sc_ecx;
35 int sc_eax;
36 int sc_trapno;
37 int sc_err;
38 int sc_eip;
39 int sc_cs;
40 int sc_eflags;
41 int sc_esp_at_signal;
42 int sc_ss;
43 int sc_387;
44 int sc_mask;
45 int sc_cr2;
46 } TRAP_FRAME, *PTRAP_FRAME;
47
48 typedef ULONG THREADINFOCLASS;
49
50 typedef struct _STARTUPINFOW {
51 DWORD cb;
52 WCHAR WindowTitle[MAX_PATH];
53 WCHAR ImageFile[MAX_PATH];
54 WCHAR CommandLine[MAX_PATH];
55 WCHAR DllPath[MAX_PATH];
56 LPWSTR Reserved[MAX_PATH];
57 LPWSTR Desktop[MAX_PATH];
58 LPWSTR Title[MAX_PATH];
59 DWORD dwX;
60 DWORD dwY;
61 DWORD dwXSize;
62 DWORD dwYSize;
63 DWORD dwXCountChars;
64 DWORD dwYCountChars;
65 DWORD dwFillAttribute;
66 DWORD dwFlags;
67 WORD wShowWindow;
68 WORD cbReserved2;
69 unsigned char * lpReserved2;
70 HANDLE hStdInput;
71 HANDLE hStdOutput;
72 HANDLE hStdError;
73 } PROCESSINFOW, *PPROCESSINFOW;
74
75
76
77 typedef struct _LDR {
78 UCHAR Initialized;
79 UCHAR InInitializationOrderModuleList;
80 PVOID InLoadOrderModuleList;
81 PVOID InMemoryOrderModuleList;
82 } LDR, *PLDR;
83
84
85 typedef struct _NT_PEB
86 {
87 UCHAR InheritedAddressSpace;
88 UCHAR ReadImageFileExecOptions;
89 UCHAR BeingDebugged;
90 LONG ImageBaseAddress;
91 LDR Ldr;
92
93 WORD NumberOfProcessors;
94 WORD NtGlobalFlag;
95
96 PPROCESSINFOW StartupInfo;
97 PHEAP ProcessHeap;
98 ATOMTABLE LocalAtomTable;
99 LPCRITICAL_SECTION CriticalSection;
100 DWORD CriticalSectionTimeout;
101 WORD MajorVersion;
102 WORD MinorVersion;
103 WORD BuildNumber;
104 WORD PlatformId;
105 } NT_PEB, *PNT_PEB;
106
107 typedef struct _CLIENT_ID
108 {
109 HANDLE UniqueProcess;
110 HANDLE UniqueThread;
111 } CLIENT_ID, *PCLIENT_ID;
112
113 typedef struct _NT_TIB {
114 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
115 PVOID StackBase;
116 PVOID StackLimit;
117 PVOID SubSystemTib;
118 union {
119 PVOID FiberData;
120 ULONG Version;
121 } Fib;
122 PVOID ArbitraryUserPointer;
123 struct _NT_TIB *Self;
124 } NT_TIB, *PNT_TIB;
125
126 typedef struct _NT_TEB
127 {
128 NT_TIB Tib;
129 CLIENT_ID Cid;
130 HANDLE RPCHandle;
131 PVOID TlsData[TLS_MINIMUM_AVAILABLE];
132 DWORD dwTlsIndex;
133 NT_PEB *Peb;
134 DWORD LastErrorCode;
135 NTSTATUS LastStatusValue;
136 DWORD LockCount;
137 UCHAR HardErrorMode;
138 } NT_TEB;
139
140 typedef struct _KTHREAD
141 {
142 DISPATCHER_HEADER DispatcherHeader;
143 TIME ElapsedTime;
144 TIME KernelTime;
145 TIME UserTime;
146 STACK_INFORMATION StackInformation;
147 PVOID ServiceDescriptorTable; // points to KeServiceDescriptorTable
148 KAFFINITY Affinity;
149 KPRIORITY CurrentPriority;
150 KPRIORITY BasePriority;
151 ULONG Quantum;
152 UCHAR ThreadState; //Thread state is a typeless enum, otherwise it should be const integer
153 ULONG FreezeCount;
154 LONG SuspendCount;
155 PTRAP_FRAME TrapFrame;
156 PVOID *Tls;
157 KWAIT_BLOCK WaitBlock[4];
158 struct _KMUTANT* MutantList;
159 PLIST_ENTRY ApcList;
160 UCHAR KernelApcDisable;
161 KTIMER TimerBlock;
162 KDEVICE_QUEUE DeviceQueue;
163 NT_TEB* Teb;
164
165 /*
166 * PURPOSE: CPU state
167 * NOTE: I have temporarily added this to give somewhere to store
168 * cpu state when the thread isn't running
169 */
170 hal_thread_state Context;
171 LIST_ENTRY Entry;
172 ULONG LastTick;
173 } KTHREAD, *PKTHREAD;
174
175
176 // According to documentation the stack should have a commited [ 1 page ] and
177 // a reserved part [ 1 M ] but can be specified otherwise in the image file.
178
179 typedef struct _INITIAL_TEB {
180 PVOID StackBase;
181 PVOID StackLimit;
182 PVOID StackCommit;
183 PVOID StackCommitMax;
184 PVOID StackReserved;
185 } INITIAL_TEB, *PINITIAL_TEB;
186
187
188
189
190
191
192 // TopLevelIrp can be one of the following values:
193 // FIXME I belong somewhere else
194
195 #define FSRTL_FSP_TOP_LEVEL_IRP (0x01)
196 #define FSRTL_CACHE_TOP_LEVEL_IRP (0x02)
197 #define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03)
198 #define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04)
199 #define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04)
200
201 typedef struct _TOP_LEVEL_IRP
202 {
203 PIRP TopLevelIrp;
204 ULONG TopLevelIrpConst;
205 } TOP_LEVEL_IRP;
206
207 typedef struct _ETHREAD {
208 KTHREAD Tcb;
209 TIME CreateTime;
210 TIME ExitTime;
211 NTSTATUS ExitStatus;
212 LIST_ENTRY PostBlockList;
213 LIST_ENTRY TerminationPortList;
214 ULONG ActiveTimerListLock;
215 PVOID ActiveTimerListHead;
216 CLIENT_ID Cid;
217 PLARGE_INTEGER LpcReplySemaphore;
218 PVOID LpcReplyMessage;
219 PLARGE_INTEGER LpcReplyMessageId;
220 PVOID ImpersonationInfo;
221 LIST_ENTRY IrpList; //
222 TOP_LEVEL_IRP TopLevelIrp;
223 ULONG ReadClusterSize;
224 UCHAR ForwardClusterOnly;
225 UCHAR DisablePageFaultClustering;
226 UCHAR DeadThread;
227 UCHAR HasTerminated;
228 ACCESS_MASK GrantedAccess;
229 struct _EPROCESS* ThreadsProcess;
230 PKSTART_ROUTINE StartAddress;
231 LPTHREAD_START_ROUTINE Win32StartAddress; // Should Specify a win32 start func
232 UCHAR LpcExitThreadCalled;
233 UCHAR HardErrorsAreDisabled;
234
235
236 /*
237 * Added by David Welch (welch@cwcom.net)
238 */
239 struct _EPROCESS* OldProcess;
240
241 } ETHREAD, *PETHREAD;
242
243
244 typedef struct _KPROCESS
245 {
246 DISPATCHER_HEADER DispatcherHeader;
247 PVOID PageTableDirectory; // FIXME: I shoud point to a PTD
248 TIME ElapsedTime;
249 TIME KernelTime;
250 TIME UserTime;
251 LIST_ENTRY InMemoryList;
252 LIST_ENTRY SwappedOutList;
253 KSPIN_LOCK SpinLock;
254 KAFFINITY Affinity;
255 ULONG StackCount;
256 KPRIORITY BasePriority;
257 ULONG DefaultThreadQuantum;
258 UCHAR ProcessState;
259 ULONG ThreadSeed;
260 UCHAR DisableBoost;
261
262 /*
263 * Added by David Welch (welch@mcmail.com)
264 */
265 LIST_ENTRY MemoryAreaList;
266 HANDLE_TABLE HandleTable;
267 } KPROCESS, *PKPROCESS;
268
269 typedef struct _EPROCESS
270 {
271 KPROCESS Pcb;
272 } EPROCESS, *PEPROCESS;
273
274 #define PROCESS_STATE_TERMINATED (1)
275 #define PROCESS_STATE_ACTIVE (2)
276
277 #endif /* __INCLUDE_DDK_PSTYPES_H */