ReactOS
0.4.16-dev-125-g798ea90
asm.h
Go to the documentation of this file.
1
/*++ NDK Version: 0095
2
3
Copyright (c) Alex Ionescu. All rights reserved.
4
5
Header Name:
6
7
asm.h
8
9
Abstract:
10
11
ASM Offsets for dealing with de-referencing structures in registers.
12
C-compatible version of the file ks386.inc present in the newest WDK.
13
14
Author:
15
16
Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
17
18
--*/
19
20
#ifndef _ASM_X86_H
21
#define _ASM_X86_H
22
23
//
24
// PCR Access
25
//
26
#ifdef __ASM__
27
#ifdef CONFIG_SMP
28
#define PCR fs:
29
#else
30
/* Address at KIP0PCRADDRESS */
31
#define PCR ds:[0xFFDFF000]
32
#endif
33
#endif
34
35
//
36
// CPU Modes
37
//
38
#define KernelMode 0x0
39
#define UserMode 0x1
40
41
//
42
// Selector Names
43
//
44
#ifdef __ASM__
45
#define RPL_MASK 0x0003
46
#define MODE_MASK 0x0001
47
#define KGDT_NULL 0x00
48
#define KGDT_R0_CODE 0x08
49
#define KGDT_R0_DATA 0x10
50
#define KGDT_R3_CODE 0x18
51
#define KGDT_R3_DATA 0x20
52
#define KGDT_TSS 0x28
53
#define KGDT_R0_PCR 0x30
54
#define KGDT_R3_TEB 0x38
55
#define KGDT_VDM_TILE 0x40
56
#define KGDT_LDT 0x48
57
#define KGDT_DF_TSS 0x50
58
#define KGDT_NMI_TSS 0x58
59
#endif
60
61
//
62
// TSS Offsets
63
//
64
#define KTSS_ESP0 0x4
65
#define KTSS_CR3 0x1C
66
#define KTSS_EIP 0x20
67
#define KTSS_EFLAGS 0x24
68
#define KTSS_EAX 0x28
69
#define KTSS_ECX 0x2C
70
#define KTSS_EDX 0x30
71
#define KTSS_EBX 0x34
72
#define KTSS_ESP 0x38
73
#define KTSS_EBP 0x3C
74
#define KTSS_ESI 0x40
75
#define KTSS_EDI 0x44
76
#define KTSS_ES 0x48
77
#define KTSS_CS 0x4C
78
#define KTSS_SS 0x50
79
#define KTSS_DS 0x54
80
#define KTSS_FS 0x58
81
#define KTSS_GS 0x5C
82
#define KTSS_LDT 0x60
83
#define KTSS_IOMAPBASE 0x66
84
#define KTSS_IO_MAPS 0x68
85
86
//
87
// KTHREAD Offsets
88
//
89
#define KTHREAD_DEBUG_ACTIVE 0x03
90
#define KTHREAD_INITIAL_STACK 0x18
91
#define KTHREAD_STACK_LIMIT 0x1C
92
#define KTHREAD_TEB 0x74
93
#define KTHREAD_KERNEL_STACK 0x20
94
#define KTHREAD_ALERTED 0x5E
95
#define KTHREAD_APCSTATE_PROCESS 0x28 + 0x10
96
#define KTHREAD_PENDING_USER_APC 0x28 + 0x16
97
#define KTHREAD_PENDING_KERNEL_APC 0x28 + 0x15
98
#define KTHREAD_CONTEXT_SWITCHES 0x48
99
#define KTHREAD_STATE_ 0x4C
100
#define KTHREAD_NPX_STATE 0x4D
101
#define KTHREAD_WAIT_IRQL 0x4E
102
#define KTHREAD_NEXT_PROCESSOR 0x40
103
#define KTHREAD_WAIT_REASON 0x5A
104
#define KTHREAD_PRIORITY 0x5B
105
#define KTHREAD_SWAP_BUSY 0x5D
106
#define KTHREAD_SERVICE_TABLE 0x118
107
#define KTHREAD_PREVIOUS_MODE 0xD7
108
#define KTHREAD_COMBINED_APC_DISABLE 0x70
109
#define KTHREAD_SPECIAL_APC_DISABLE 0x72
110
#define KTHREAD_LARGE_STACK 0x107
111
#define KTHREAD_TRAP_FRAME 0x110
112
#define KTHREAD_CALLBACK_STACK 0x114
113
#define KTHREAD_APC_STATE_INDEX 0x11C
114
#define KTHREAD_STACK_BASE 0x158
115
#define KTHREAD_QUANTUM 0x15D
116
#define KTHREAD_KERNEL_TIME 0x160
117
#define KTHREAD_USER_TIME 0x18C
118
119
//
120
// KPROCESS Offsets
121
//
122
#define KPROCESS_DIRECTORY_TABLE_BASE 0x18
123
#define KPROCESS_LDT_DESCRIPTOR0 0x20
124
#define KPROCESS_LDT_DESCRIPTOR1 0x24
125
#define KPROCESS_INT21_DESCRIPTOR0 0x28
126
#define KPROCESS_INT21_DESCRIPTOR1 0x2C
127
#define KPROCESS_IOPM_OFFSET 0x30
128
#define KPROCESS_ACTIVE_PROCESSORS 0x34
129
#define EPROCESS_VDM_OBJECTS 0x144
130
131
//
132
// KTIMER_TABLE Offsets
133
//
134
#ifdef __ASM__
135
#define KTIMER_TABLE_ENTRY 0x00
136
#define KTIMER_TABLE_TIME 0x08
137
#define TIMER_ENTRY_SIZE 0x10
138
#define TIMER_TABLE_SIZE 0x200
139
#endif
140
141
//
142
// KPRCB Offsets
143
//
144
#define KPRCB_DR0 0x2F8
145
#define KPRCB_DR1 0x2FC
146
#define KPRCB_DR2 0x300
147
#define KPRCB_DR3 0x304
148
#define KPRCB_DR6 0x308
149
#define KPRCB_DR7 0x30C
150
#define KPRCB_TIMER_HAND 0x964
151
#define KPRCB_TIMER_REQUEST 0x968
152
153
//
154
// KPCR Offsets
155
//
156
#define KPCR_EXCEPTION_LIST 0x0
157
#define KPCR_INITIAL_STACK 0x4
158
#define KPCR_STACK_LIMIT 0x8
159
#define KPCR_PERF_GLOBAL_GROUP_MASK 0x8
160
#define KPCR_CONTEXT_SWITCHES 0x10
161
#define KPCR_SET_MEMBER_COPY 0x14
162
#define KPCR_TEB 0x18
163
#define KPCR_SELF 0x1C
164
#define KPCR_PRCB 0x20
165
#define KPCR_IRQL 0x24
166
#define KPCR_IRR 0x28
167
#define KPCR_IRR_ACTIVE 0x2C
168
#define KPCR_IDR 0x30
169
#define KPCR_KD_VERSION_BLOCK 0x34
170
#define KPCR_IDT 0x38
171
#define KPCR_GDT 0x3C
172
#define KPCR_TSS 0x40
173
#define KPCR_STALL_SCALE_FACTOR 0x4C
174
#define KPCR_SET_MEMBER 0x48
175
#define KPCR_NUMBER 0x51
176
#define KPCR_VDM_ALERT 0x54
177
#define KPCR_PRCB_DATA 0x120
178
#define KPCR_CURRENT_THREAD 0x124
179
#define KPCR_PRCB_NEXT_THREAD 0x128
180
#define KPCR_PRCB_IDLE_THREAD 0x12C
181
#define KPCR_PROCESSOR_NUMBER 0x130
182
#define KPCR_PRCB_SET_MEMBER 0x134
183
#define KPCR_PRCB_CPU_TYPE 0x138
184
#define KPCR_PRCB_PRCB_LOCK 0xA7C
185
#define KPCR_NPX_THREAD 0x640
186
#define KPCR_DR6 0x428
187
#define KPCR_DR7 0x42C
188
#define KPCR_PRCB_INTERRUPT_COUNT 0x644
189
#define KPCR_PRCB_KERNEL_TIME 0x648
190
#define KPCR_PRCB_USER_TIME 0x64C
191
#define KPCR_PRCB_DPC_TIME 0x650
192
#define KPCR_PRCB_DEBUG_DPC_TIME 0x654
193
#define KPCR_PRCB_INTERRUPT_TIME 0x658
194
#define KPCR_PRCB_ADJUST_DPC_THRESHOLD 0x65C
195
#define KPCR_PRCB_SKIP_TICK 0x664
196
#define KPCR_SYSTEM_CALLS 0x6B8
197
#define KPCR_PRCB_DPC_QUEUE_DEPTH 0xA4C
198
#define KPCR_PRCB_DPC_COUNT 0xA50
199
#define KPCR_PRCB_DPC_STACK 0xA68
200
#define KPCR_PRCB_MAXIMUM_DPC_QUEUE_DEPTH 0xA6C
201
#define KPCR_PRCB_DPC_REQUEST_RATE 0xA70
202
#define KPCR_PRCB_DPC_INTERRUPT_REQUESTED 0xA78
203
#define KPCR_PRCB_DPC_ROUTINE_ACTIVE 0xA7A
204
#define KPCR_PRCB_DPC_LAST_COUNT 0xA80
205
#define KPCR_PRCB_TIMER_REQUEST 0xA88
206
#define KPCR_PRCB_QUANTUM_END 0xAA1
207
#define KPCR_PRCB_IDLE_SCHEDULE 0xAA3
208
#define KPCR_PRCB_DEFERRED_READY_LIST_HEAD 0xC10
209
#define KPCR_PRCB_POWER_STATE_IDLE_FUNCTION 0xEC0
210
211
//
212
// KINTERRUPT Offsets
213
//
214
#define KINTERRUPT_INTERRUPT_LIST_HEAD 0x04
215
#define KINTERRUPT_SERVICE_ROUTINE 0x0C
216
#define KINTERRUPT_SERVICE_CONTEXT 0x10
217
#define KINTERRUPT_TICK_COUNT 0x18
218
#define KINTERRUPT_ACTUAL_LOCK 0x1C
219
#define KINTERRUPT_DISPATCH_ADDRESS 0x20
220
#define KINTERRUPT_VECTOR 0x24
221
#define KINTERRUPT_IRQL 0x28
222
#define KINTERRUPT_SYNCHRONIZE_IRQL 0x29
223
#define KINTERRUPT_DISPATCH_COUNT 0x38
224
#define KINTERRUPT_DISPATCH_CODE 0x3C
225
226
//
227
// KGDTENTRY Offsets
228
//
229
#define KGDT_BASE_LOW 0x2
230
#define KGDT_BASE_MID 0x4
231
#define KGDT_BASE_HI 0x7
232
#define KGDT_LIMIT_HI 0x6
233
#define KGDT_LIMIT_LOW 0x0
234
235
//
236
// FPU Save Area Offsets
237
//
238
#define FP_CONTROL_WORD 0x0
239
#define FP_STATUS_WORD 0x4
240
#define FP_TAG_WORD 0x8
241
#define FP_ERROR_OFFSET 0xC
242
#define FP_ERROR_SELECTOR 0x10
243
#define FP_DATA_OFFSET 0x14
244
#define FP_DATA_SELECTOR 0x18
245
#define FN_CR0_NPX_STATE 0x20C
246
#define SIZEOF_FX_SAVE_AREA 528
247
#define NPX_FRAME_LENGTH 0x210
248
249
//
250
// FX Save Area Offsets
251
//
252
#define FX_CONTROL_WORD 0x0
253
#define FX_STATUS_WORD 0x2
254
#define FX_TAG_WORD 0x4
255
#define FX_ERROR_OPCODE 0x6
256
#define FX_ERROR_OFFSET 0x8
257
#define FX_ERROR_SELECTOR 0xC
258
#define FX_DATA_OFFSET 0x10
259
#define FX_DATA_SELECTOR 0x14
260
#define FX_MXCSR 0x18
261
262
//
263
// NPX States
264
//
265
#define NPX_STATE_NOT_LOADED 0xA
266
#define NPX_STATE_LOADED 0x0
267
268
//
269
// Trap Frame Offsets
270
//
271
#define KTRAP_FRAME_DEBUGEBP 0x0
272
#define KTRAP_FRAME_DEBUGEIP 0x4
273
#define KTRAP_FRAME_DEBUGARGMARK 0x8
274
#define KTRAP_FRAME_DEBUGPOINTER 0xC
275
#define KTRAP_FRAME_TEMPCS 0x10
276
#define KTRAP_FRAME_TEMPESP 0x14
277
#define KTRAP_FRAME_DR0 0x18
278
#define KTRAP_FRAME_DR1 0x1C
279
#define KTRAP_FRAME_DR2 0x20
280
#define KTRAP_FRAME_DR3 0x24
281
#define KTRAP_FRAME_DR6 0x28
282
#define KTRAP_FRAME_DR7 0x2C
283
#define KTRAP_FRAME_GS 0x30
284
#define KTRAP_FRAME_RESERVED1 0x32
285
#define KTRAP_FRAME_ES 0x34
286
#define KTRAP_FRAME_RESERVED2 0x36
287
#define KTRAP_FRAME_DS 0x38
288
#define KTRAP_FRAME_RESERVED3 0x3A
289
#define KTRAP_FRAME_EDX 0x3C
290
#define KTRAP_FRAME_ECX 0x40
291
#define KTRAP_FRAME_EAX 0x44
292
#define KTRAP_FRAME_PREVIOUS_MODE 0x48
293
#define KTRAP_FRAME_EXCEPTION_LIST 0x4C
294
#define KTRAP_FRAME_FS 0x50
295
#define KTRAP_FRAME_RESERVED4 0x52
296
#define KTRAP_FRAME_EDI 0x54
297
#define KTRAP_FRAME_ESI 0x58
298
#define KTRAP_FRAME_EBX 0x5C
299
#define KTRAP_FRAME_EBP 0x60
300
#define KTRAP_FRAME_ERROR_CODE 0x64
301
#define KTRAP_FRAME_EIP 0x68
302
#define KTRAP_FRAME_CS 0x6C
303
#define KTRAP_FRAME_EFLAGS 0x70
304
#define KTRAP_FRAME_ESP 0x74
305
#define KTRAP_FRAME_SS 0x78
306
#define KTRAP_FRAME_RESERVED5 0x7A
307
#define KTRAP_FRAME_V86_ES 0x7C
308
#define KTRAP_FRAME_RESERVED6 0x7E
309
#define KTRAP_FRAME_V86_DS 0x80
310
#define KTRAP_FRAME_RESERVED7 0x82
311
#define KTRAP_FRAME_V86_FS 0x84
312
#define KTRAP_FRAME_RESERVED8 0x86
313
#define KTRAP_FRAME_V86_GS 0x88
314
#define KTRAP_FRAME_RESERVED9 0x8A
315
#define KTRAP_FRAME_SIZE 0x8C
316
#define KTRAP_FRAME_LENGTH 0x8C
317
#define KTRAP_FRAME_ALIGN 0x04
318
#define FRAME_EDITED 0xFFF8
319
320
//
321
// USER_SHARED_DATA Offsets
322
//
323
#ifdef __ASM__
324
#define USER_SHARED_DATA 0xFFDF0000
325
#endif
326
#define USER_SHARED_DATA_INTERRUPT_TIME 0x8
327
#define USER_SHARED_DATA_SYSTEM_TIME 0x14
328
#define USER_SHARED_DATA_PROCESSOR_FEATURES 0x274
329
#define USER_SHARED_DATA_TICK_COUNT 0x320
330
331
//
332
// KUSER_SHARED_DATA Offsets (this stuff is trash)
333
//
334
#define KERNEL_USER_SHARED_DATA 0x7FFE0000
335
#define KUSER_SHARED_PROCESSOR_FEATURES KERNEL_USER_SHARED_DATA + 0x274
336
#define KUSER_SHARED_SYSCALL KERNEL_USER_SHARED_DATA + 0x300
337
#define KUSER_SHARED_SYSCALL_RET KERNEL_USER_SHARED_DATA + 0x304
338
#define PROCESSOR_FEATURE_FXSR KUSER_SHARED_PROCESSOR_FEATURES + 0x4
339
340
//
341
// CONTEXT Offsets
342
//
343
#define CONTEXT_FLAGS 0x0
344
#define CONTEXT_DR6 0x14
345
#define CONTEXT_FLOAT_SAVE 0x1C
346
#define CONTEXT_SEGGS 0x8C
347
#define CONTEXT_SEGFS 0x90
348
#define CONTEXT_SEGES 0x94
349
#define CONTEXT_SEGDS 0x98
350
#define CONTEXT_EDI 0x9C
351
#define CONTEXT_ESI 0xA0
352
#define CONTEXT_EBX 0xA4
353
#define CONTEXT_EDX 0xA8
354
#define CONTEXT_ECX 0xAC
355
#define CONTEXT_EAX 0xB0
356
#define CONTEXT_EBP 0xB4
357
#define CONTEXT_EIP 0xB8
358
#define CONTEXT_SEGCS 0xBC
359
#define CONTEXT_EFLAGS 0xC0
360
#define CONTEXT_ESP 0xC4
361
#define CONTEXT_SEGSS 0xC8
362
#define CONTEXT_FLOAT_SAVE_CONTROL_WORD CONTEXT_FLOAT_SAVE + FP_CONTROL_WORD
363
#define CONTEXT_FLOAT_SAVE_STATUS_WORD CONTEXT_FLOAT_SAVE + FP_STATUS_WORD
364
#define CONTEXT_FLOAT_SAVE_TAG_WORD CONTEXT_FLOAT_SAVE + FP_TAG_WORD
365
#define CONTEXT_ALIGNED_SIZE 0x2CC
366
#define CONTEXT_FRAME_LENGTH 0x2D0
367
368
//
369
// CONTEXT Flags
370
//
371
#ifdef __ASM__
372
#define CONTEXT_CONTROL 0x10001
373
#define CONTEXT_INTEGER 0x10002
374
#define CONTEXT_SEGMENTS 0x10004
375
#define CONTEXT_FLOATING_POINT 0x10008
376
#define CONTEXT_DEBUG_REGISTERS 0x10010
377
#define CONTEXT_FULL 0x10007
378
#endif
379
380
//
381
// EXCEPTION_RECORD Offsets
382
//
383
#define EXCEPTION_RECORD_EXCEPTION_CODE 0x0
384
#define EXCEPTION_RECORD_EXCEPTION_FLAGS 0x4
385
#define EXCEPTION_RECORD_EXCEPTION_RECORD 0x8
386
#define EXCEPTION_RECORD_EXCEPTION_ADDRESS 0xC
387
#define EXCEPTION_RECORD_NUMBER_PARAMETERS 0x10
388
#define SIZEOF_EXCEPTION_RECORD 0x14
389
#define EXCEPTION_RECORD_LENGTH 0x50
390
391
//
392
// Exception types
393
//
394
#ifdef __ASM__
395
#define EXCEPTION_NONCONTINUABLE 0x0001
396
#define EXCEPTION_UNWINDING 0x0002
397
#define EXCEPTION_EXIT_UNWIND 0x0004
398
#define EXCEPTION_STACK_INVALID 0x0008
399
#define EXCEPTION_NESTED_CALL 0x00010
400
#define EXCEPTION_TARGET_UNWIND 0x00020
401
#define EXCEPTION_COLLIDED_UNWIND 0x00040
402
#define EXCEPTION_UNWIND 0x00066
403
#define EXCEPTION_EXECUTE_HANDLER 0x00001
404
#define EXCEPTION_CONTINUE_SEARCH 0x00000
405
#define EXCEPTION_CONTINUE_EXECUTION 0xFFFFFFFF
406
#define EXCEPTION_CHAIN_END 0xFFFFFFFF
407
#endif
408
409
//
410
// TEB Offsets
411
//
412
#define TEB_EXCEPTION_LIST 0x0
413
#define TEB_STACK_BASE 0x4
414
#define TEB_STACK_LIMIT 0x8
415
#define TEB_FIBER_DATA 0x10
416
#define TEB_SELF 0x18
417
#define TEB_PEB 0x30
418
#define TEB_EXCEPTION_CODE 0x1A4
419
#define TEB_ACTIVATION_CONTEXT_STACK_POINTER 0x1A8
420
#define TEB_GL_TABLE 0xBE8
421
#define TEB_DEALLOCATION_STACK 0xE0C
422
#define TEB_GDI_BATCH_COUNT 0xF70
423
#define TEB_GUARANTEED_STACK_BYTES 0xF78
424
#define TEB_FLS_DATA 0xFB4
425
426
//
427
// PEB Offsets
428
//
429
#define PEB_KERNEL_CALLBACK_TABLE 0x2C
430
431
//
432
// FIBER Offsets
433
//
434
#define FIBER_PARAMETER 0x0
435
#define FIBER_EXCEPTION_LIST 0x4
436
#define FIBER_STACK_BASE 0x8
437
#define FIBER_STACK_LIMIT 0xC
438
#define FIBER_DEALLOCATION_STACK 0x10
439
#define FIBER_CONTEXT 0x14
440
#define FIBER_GUARANTEED_STACK_BYTES 0x2E0
441
#define FIBER_FLS_DATA 0x2E4
442
#define FIBER_ACTIVATION_CONTEXT_STACK 0x2E8
443
#define FIBER_CONTEXT_FLAGS FIBER_CONTEXT + CONTEXT_FLAGS
444
#define FIBER_CONTEXT_EAX FIBER_CONTEXT + CONTEXT_EAX
445
#define FIBER_CONTEXT_EBX FIBER_CONTEXT + CONTEXT_EBX
446
#define FIBER_CONTEXT_ECX FIBER_CONTEXT + CONTEXT_ECX
447
#define FIBER_CONTEXT_EDX FIBER_CONTEXT + CONTEXT_EDX
448
#define FIBER_CONTEXT_ESI FIBER_CONTEXT + CONTEXT_ESI
449
#define FIBER_CONTEXT_EDI FIBER_CONTEXT + CONTEXT_EDI
450
#define FIBER_CONTEXT_EBP FIBER_CONTEXT + CONTEXT_EBP
451
#define FIBER_CONTEXT_EIP FIBER_CONTEXT + CONTEXT_EIP
452
#define FIBER_CONTEXT_ESP FIBER_CONTEXT + CONTEXT_ESP
453
#define FIBER_CONTEXT_DR6 FIBER_CONTEXT + CONTEXT_DR6
454
#define FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_STATUS_WORD
455
#define FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_CONTROL_WORD
456
#define FIBER_CONTEXT_FLOAT_SAVE_TAG_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_TAG_WORD
457
458
//
459
// EFLAGS
460
//
461
#ifdef __ASM__
462
#define EFLAGS_TF 0x100
463
#define EFLAGS_INTERRUPT_MASK 0x200
464
#define EFLAGS_IOPL 0x3000
465
#define EFLAGS_NESTED_TASK 0x4000
466
#define EFLAGS_V86_MASK 0x20000
467
#define EFLAGS_ALIGN_CHECK 0x40000
468
#define EFLAGS_VIF 0x80000
469
#define EFLAGS_VIP 0x100000
470
#define EFLAG_SIGN 0x8000
471
#define EFLAG_ZERO 0x4000
472
#define EFLAGS_ID 0x200000
473
#define EFLAG_SELECT (EFLAG_SIGN + EFLAG_ZERO)
474
#endif
475
#define EFLAGS_USER_SANITIZE 0x3F4DD7
476
477
//
478
// CR0
479
//
480
#define CR0_PE 0x1
481
#define CR0_MP 0x2
482
#define CR0_EM 0x4
483
#define CR0_TS 0x8
484
#define CR0_ET 0x10
485
#define CR0_NE 0x20
486
#define CR0_WP 0x10000
487
#define CR0_AM 0x40000
488
#define CR0_NW 0x20000000
489
#define CR0_CD 0x40000000
490
#define CR0_PG 0x80000000
491
492
//
493
// CR4
494
//
495
#ifdef __ASM__
496
#define CR4_VME 0x1
497
#define CR4_PVI 0x2
498
#define CR4_TSD 0x4
499
#define CR4_DE 0x8
500
#define CR4_PSE 0x10
501
#define CR4_PAE 0x20
502
#define CR4_MCE 0x40
503
#define CR4_PGE 0x80
504
#define CR4_FXSR 0x200
505
#define CR4_XMMEXCPT 0x400
506
#endif
507
508
//
509
// DR6 and 7 Masks
510
//
511
#define DR6_LEGAL 0xE00F
512
#define DR7_LEGAL 0xFFFF0155
513
#define DR7_ACTIVE 0x55
514
#define DR7_OVERRIDE_V 0x04
515
#define DR7_RESERVED_MASK 0xDC00
516
#define DR7_OVERRIDE_MASK 0xF0000
517
518
//
519
// Usermode callout frame definitions
520
//
521
#define CBSTACK_STACK 0x0
522
#define CBSTACK_TRAP_FRAME 0x4
523
#define CBSTACK_CALLBACK_STACK 0x8
524
#define CBSTACK_EBP 0x18
525
#define CBSTACK_RESULT 0x20
526
#define CBSTACK_RESULT_LENGTH 0x24
527
528
//
529
// NTSTATUS, Bugcheck Codes and Debug Codes
530
//
531
#ifdef __ASM__
532
#define STATUS_ACCESS_VIOLATION 0xC0000005
533
#define STATUS_IN_PAGE_ERROR 0xC0000006
534
#define STATUS_GUARD_PAGE_VIOLATION 0x80000001
535
#define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
536
#define STATUS_STACK_OVERFLOW 0xC00000FD
537
#define KI_EXCEPTION_ACCESS_VIOLATION 0x10000004
538
#define STATUS_INVALID_SYSTEM_SERVICE 0xC000001C
539
#define STATUS_NO_CALLBACK_ACTIVE 0xC0000258
540
#define STATUS_CALLBACK_POP_STACK 0xC0000423
541
#define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
542
#define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
543
#define STATUS_INVALID_LOCK_SEQUENCE 0xC000001E
544
#define STATUS_BREAKPOINT 0x80000003
545
#define STATUS_SINGLE_STEP 0x80000004
546
#define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
547
#define STATUS_INTEGER_OVERFLOW 0xC0000095
548
#define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
549
#define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
550
#define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
551
#define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
552
#define STATUS_FLOAT_OVERFLOW 0xC0000091
553
#define STATUS_FLOAT_STACK_CHECK 0xC0000092
554
#define STATUS_FLOAT_UNDERFLOW 0xC0000093
555
#define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
556
#define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
557
#define STATUS_ASSERTION_FAILURE 0xC0000420
558
#define APC_INDEX_MISMATCH 0x01
559
#define IRQL_NOT_GREATER_OR_EQUAL 0x09
560
#define IRQL_NOT_LESS_OR_EQUAL 0x0A
561
#define TRAP_CAUSE_UNKNOWN 0x12
562
#define KMODE_EXCEPTION_NOT_HANDLED 0x13
563
#define IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x4A
564
#define UNEXPECTED_KERNEL_MODE_TRAP 0x7F
565
#define ATTEMPTED_SWITCH_FROM_DPC 0xB8
566
#define HARDWARE_INTERRUPT_STORM 0xF2
567
#define DBG_STATUS_CONTROL_C 0x01
568
569
//
570
// DebugService Control Types
571
//
572
#define BREAKPOINT_BREAK 0x0
573
574
//
575
// IRQL Levels
576
//
577
#define PASSIVE_LEVEL 0x0
578
#define APC_LEVEL 0x1
579
#define DISPATCH_LEVEL 0x2
580
#define PROFILE_LEVEL 0x1B
581
#define CLOCK1_LEVEL 0x1C
582
#define CLOCK2_LEVEL 0x1C
583
#define IPI_LEVEL 0x1D
584
#define POWER_LEVEL 0x1E
585
#define HIGH_LEVEL 0x1F
586
587
//
588
// Synchronization-level IRQL
589
//
590
#ifndef CONFIG_SMP
591
#define SYNCH_LEVEL DISPATCH_LEVEL
592
#else
593
#if (NTDDI_VERSION < NTDDI_WS03)
594
#define SYNCH_LEVEL (IPI_LEVEL - 1)
595
#else
596
#define SYNCH_LEVEL (IPI_LEVEL - 2)
597
#endif
598
#endif
599
600
//
601
// Quantum Decrements
602
//
603
#define CLOCK_QUANTUM_DECREMENT 0x3
604
#endif
605
606
//
607
// System Call Table definitions
608
//
609
#define SERVICE_DESCRIPTOR_BASE 0x0000
610
#define SERVICE_DESCRIPTOR_COUNT 0x0004
611
#define SERVICE_DESCRIPTOR_LIMIT 0x0008
612
#define SERVICE_DESCRIPTOR_NUMBER 0x000C
613
#define SERVICE_DESCRIPTOR_LENGTH 0x0010
614
615
//
616
// Exception codes
617
//
618
#define EXCEPTION_DIVIDED_BY_ZERO 0
619
#define EXCEPTION_DEBUG 1
620
#define EXCEPTION_NMI 2
621
#define EXCEPTION_INT3 3
622
#define EXCEPTION_BOUND_CHECK 5
623
#define EXCEPTION_INVALID_OPCODE 6
624
#define EXCEPTION_NPX_NOT_AVAILABLE 7
625
#define EXCEPTION_DOUBLE_FAULT 8
626
#define EXCEPTION_NPX_OVERRUN 9
627
#define EXCEPTION_INVALID_TSS 0x0A
628
#define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
629
#define EXCEPTION_STACK_FAULT 0x0C
630
#define EXCEPTION_GP_FAULT 0x0D
631
#define EXCEPTION_RESERVED_TRAP 0x0F
632
#define EXCEPTION_NPX_ERROR 0x010
633
#define EXCEPTION_ALIGNMENT_CHECK 0x011
634
635
//
636
// Hypervisor Enlightenment Definitions
637
//
638
#define HV_MMU_USE_HYPERCALL_FOR_ADDRESS_SWITCH 0x01
639
#define HV_MMU_USE_HYPERCALL_FOR_LOCAL_FLUSH 0x02
640
#define HV_MMU_USE_HYPERCALL_FOR_REMOTE_FLUSH 0x04
641
#define HV_APIC_ENLIGHTENED 0x10
642
#define HV_KE_USE_HYPERCALL_FOR_LONG_SPIN_WAIT 0x40
643
644
//
645
// VDM State Pointer
646
//
647
#define FIXED_NTVDMSTATE_LINEAR_PC_AT 0x714
648
649
//
650
// Machine types
651
//
652
#ifdef __ASM__
653
#define MACHINE_TYPE_ISA 0x0000
654
#define MACHINE_TYPE_EISA 0x0001
655
#define MACHINE_TYPE_MCA 0x0002
656
657
//
658
// Kernel Feature Bits
659
//
660
#define KF_RDTSC 0x00000002
661
662
//
663
// Kernel Stack Size
664
//
665
#define KERNEL_STACK_SIZE 0x3000
666
#endif
667
668
//
669
// Generic Definitions
670
//
671
#define PRIMARY_VECTOR_BASE 0x30
// FIXME: HACK
672
#define MAXIMUM_IDTVECTOR 0xFF
673
#endif
// !_ASM_X86_H
sdk
include
ndk
i386
asm.h
Generated on Mon Oct 14 2024 06:12:27 for ReactOS by
1.9.6