ReactOS 0.4.15-dev-5666-gc548b97
ke.h
Go to the documentation of this file.
4/* Interrupt request levels */
5#define PASSIVE_LEVEL 0
6#define LOW_LEVEL 0
7#define APC_LEVEL 1
8#define DISPATCH_LEVEL 2
9#define CMCI_LEVEL 5
10#define CLOCK_LEVEL 13
11#define IPI_LEVEL 14
12#define DRS_LEVEL 14
13#define POWER_LEVEL 14
14#define PROFILE_LEVEL 15
15#define HIGH_LEVEL 15
16
17#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
18#define SharedUserData ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA)
19#define SharedInterruptTime (KI_USER_SHARED_DATA + 0x8)
20#define SharedSystemTime (KI_USER_SHARED_DATA + 0x14)
21#define SharedTickCount (KI_USER_SHARED_DATA + 0x320)
22
23#define PAGE_SIZE 0x1000
24#define PAGE_SHIFT 12L
25
26#define EFLAG_SIGN 0x8000
27#define EFLAG_ZERO 0x4000
28#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
29
30typedef struct _KFLOATING_SAVE
31{
34
36
37#define KeQueryInterruptTime() \
38 (*(volatile ULONG64*)SharedInterruptTime)
39
40#define KeQuerySystemTime(CurrentCount) \
41 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime
42
43#define KeQueryTickCount(CurrentCount) \
44 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount
45
46#define KeGetDcacheFillSize() 1L
47
48#define YieldProcessor _mm_pause
49#define MemoryBarrier __faststorefence
50#define FastFence __faststorefence
51#define LoadFence _mm_lfence
52#define MemoryFence _mm_mfence
53#define StoreFence _mm_sfence
54#define LFENCE_ACQUIRE() LoadFence()
55
57VOID
59 VOID)
60{
61 // FIXME: Do we really need lfence after the __faststorefence ?
62 FastFence();
64}
65
66#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
67
73{
74 return (KIRQL)__readcr8();
75}
76
79VOID
82{
83 //ASSERT((KIRQL)__readcr8() >= NewIrql);
84 __writecr8(NewIrql);
85}
86
94{
96
97 OldIrql = (KIRQL)__readcr8();
98 //ASSERT(OldIrql <= NewIrql);
99 __writecr8(NewIrql);
100 return OldIrql;
101}
102#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
103
108KIRQL
110 VOID)
111{
113}
114
116KIRQL
118{
119 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2
120}
121
125{
126 return (struct _KTHREAD *)__readgsqword(0x188);
127}
128
137 _Out_ PKFLOATING_SAVE FloatSave)
138{
139 UNREFERENCED_PARAMETER(FloatSave);
140 return STATUS_SUCCESS;
141}
142
149 _In_ PKFLOATING_SAVE FloatSave)
150{
151 UNREFERENCED_PARAMETER(FloatSave);
152 return STATUS_SUCCESS;
153}
154
155#if (NTDDI_VERSION >= NTDDI_WIN7)
157ULONG
159{
160 return __readgsdword(0x1a4);
161}
162#endif
163
164/* VOID
165 * KeFlushIoBuffers(
166 * IN PMDL Mdl,
167 * IN BOOLEAN ReadOperation,
168 * IN BOOLEAN DmaOperation)
169 */
170#define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
171
172/* x86 and x64 performs a 0x2C interrupt */
173#define DbgRaiseAssertionFailure __int2c
174
175$endif /* _WDMDDK_ */
177
178#define PAUSE_PROCESSOR YieldProcessor();
179
180#define KERNEL_STACK_SIZE 0x6000
181#define KERNEL_LARGE_STACK_SIZE 0x12000
182#define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
183
184#define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
185
186#define EXCEPTION_READ_FAULT 0
187#define EXCEPTION_WRITE_FAULT 1
188#define EXCEPTION_EXECUTE_FAULT 8
189
190#if !defined(RC_INVOKED)
191
192#define CONTEXT_AMD64 0x100000
193
194#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
195#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
196#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
197#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
198#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
199
200#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
201#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
202
203#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x40L)
204
205#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
206#define CONTEXT_SERVICE_ACTIVE 0x10000000
207#define CONTEXT_EXCEPTION_REQUEST 0x40000000
208#define CONTEXT_EXCEPTION_REPORTING 0x80000000
209
210#endif /* !defined(RC_INVOKED) */
211
212#define INITIAL_MXCSR 0x1f80
213#define INITIAL_FPCSR 0x027f
214
215typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
216 ULONG64 P1Home;
217 ULONG64 P2Home;
218 ULONG64 P3Home;
219 ULONG64 P4Home;
220 ULONG64 P5Home;
221 ULONG64 P6Home;
222 ULONG ContextFlags;
223 ULONG MxCsr;
224 USHORT SegCs;
225 USHORT SegDs;
226 USHORT SegEs;
227 USHORT SegFs;
228 USHORT SegGs;
229 USHORT SegSs;
230 ULONG EFlags;
231 ULONG64 Dr0;
232 ULONG64 Dr1;
233 ULONG64 Dr2;
234 ULONG64 Dr3;
235 ULONG64 Dr6;
236 ULONG64 Dr7;
237 ULONG64 Rax;
238 ULONG64 Rcx;
239 ULONG64 Rdx;
240 ULONG64 Rbx;
241 ULONG64 Rsp;
242 ULONG64 Rbp;
243 ULONG64 Rsi;
244 ULONG64 Rdi;
245 ULONG64 R8;
246 ULONG64 R9;
247 ULONG64 R10;
248 ULONG64 R11;
249 ULONG64 R12;
250 ULONG64 R13;
251 ULONG64 R14;
252 ULONG64 R15;
253 ULONG64 Rip;
254 union {
255 XMM_SAVE_AREA32 FltSave;
256 struct {
257 M128A Header[2];
258 M128A Legacy[8];
259 M128A Xmm0;
260 M128A Xmm1;
261 M128A Xmm2;
262 M128A Xmm3;
263 M128A Xmm4;
264 M128A Xmm5;
265 M128A Xmm6;
266 M128A Xmm7;
267 M128A Xmm8;
268 M128A Xmm9;
269 M128A Xmm10;
270 M128A Xmm11;
271 M128A Xmm12;
272 M128A Xmm13;
273 M128A Xmm14;
274 M128A Xmm15;
277 M128A VectorRegister[26];
278 ULONG64 VectorControl;
279 ULONG64 DebugControl;
280 ULONG64 LastBranchToRip;
281 ULONG64 LastBranchFromRip;
282 ULONG64 LastExceptionToRip;
283 ULONG64 LastExceptionFromRip;
285
286#define PCR_MINOR_VERSION 1
287#define PCR_MAJOR_VERSION 1
288
289typedef struct _KPCR
290{
291 _ANONYMOUS_UNION union
292 {
294 _ANONYMOUS_STRUCT struct
295 {
299 struct _KPCR *Self;
303 };
304 };
324
326PKPCR
328{
329 return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
330}
331
332#if (NTDDI_VERSION >= NTDDI_WIN7)
333_CRT_DEPRECATE_TEXT("KeGetCurrentProcessorNumber is deprecated. Use KeGetCurrentProcessorNumberEx or KeGetCurrentProcessorIndex instead.")
334#endif
336ULONG
338{
339 return __readgsbyte(0x184);
340}
341
342$endif /* _NTDDK_ */
@ R15
Definition: amd64_sup.c:13
@ R13
Definition: amd64_sup.c:13
@ R12
Definition: amd64_sup.c:13
@ R9
Definition: amd64_sup.c:13
@ R14
Definition: amd64_sup.c:13
@ R8
Definition: amd64_sup.c:13
@ R11
Definition: amd64_sup.c:13
@ R10
Definition: amd64_sup.c:13
LONG NTSTATUS
Definition: precomp.h:26
Definition: Header.h:9
#define _CRT_DEPRECATE_TEXT(_Text)
Definition: crtdefs.h:202
#define _Kernel_float_restored_
Definition: driverspecs.h:239
#define _Kernel_requires_resource_held_(kind)
Definition: driverspecs.h:244
#define _Kernel_requires_resource_not_held_(kind)
Definition: driverspecs.h:245
#define _IRQL_requires_max_(irql)
Definition: driverspecs.h:230
#define _IRQL_restores_
Definition: driverspecs.h:233
#define _Kernel_releases_resource_(kind)
Definition: driverspecs.h:243
#define _IRQL_saves_
Definition: driverspecs.h:235
#define _IRQL_raises_(irql)
Definition: driverspecs.h:228
#define _Kernel_acquires_resource_(kind)
Definition: driverspecs.h:246
#define _Kernel_float_saved_
Definition: driverspecs.h:240
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeLowerIrql(oldIrql)
Definition: env_spec_w32.h:602
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG IN OUT PLONG IN LONG Increment KeRaiseIrqlToDpcLevel
Definition: CrNtStubs.h:68
KIRQL FASTCALL KfRaiseIrql(IN KIRQL NewIrql)
Definition: pic.c:187
#define KeGetCurrentThread
Definition: hal.h:55
#define KeSaveFloatingPointState(x)
Definition: kmixer.h:32
#define KeRestoreFloatingPointState(x)
Definition: kmixer.h:33
unsigned int ULONG
Definition: retypes.h:1
unsigned __int64 ULONG64
Definition: imports.h:198
#define _Success_(expr)
Definition: ms_sal.h:259
#define _Notliteral_
Definition: ms_sal.h:554
#define _Always_(annos)
Definition: ms_sal.h:270
#define _At_(target, annos)
Definition: ms_sal.h:244
#define _Must_inspect_result_
Definition: ms_sal.h:558
#define _Out_
Definition: ms_sal.h:345
#define _In_
Definition: ms_sal.h:308
#define _Post_satisfies_(cond)
Definition: ms_sal.h:588
#define DECLSPEC_ALIGN(x)
Definition: ntbasedef.h:251
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
#define DUMMYUNIONNAME
Definition: ntbasedef.h:32
#define DUMMYSTRUCTNAME
Definition: ntbasedef.h:58
#define _ANONYMOUS_UNION
Definition: ntbasedef.h:30
#define _ANONYMOUS_STRUCT
Definition: ntbasedef.h:56
#define _NTDDK_
unsigned short USHORT
Definition: pedump.c:61
#define LFENCE_ACQUIRE()
Definition: ke.h:54
XSAVE_FORMAT XMM_SAVE_AREA32
Definition: ke.h:35
FORCEINLINE ULONG KeGetCurrentProcessorNumber(VOID)
Definition: ke.h:337
XSAVE_FORMAT * PXMM_SAVE_AREA32
Definition: ke.h:35
KFLOATING_SAVE
Definition: ke.h:33
FORCEINLINE ULONG KeGetCurrentProcessorIndex(VOID)
Definition: ke.h:158
FORCEINLINE KIRQL KeRaiseIrqlToSynchLevel(VOID)
Definition: ke.h:117
$if(_WDMDDK_) typedef struct _KFLOATING_SAVE
Definition: ke.h:1
struct _KPCR KPCR
#define HIGH_LEVEL
FORCEINLINE VOID KeMemoryBarrier(VOID)
Definition: ke.h:58
* PKFLOATING_SAVE
Definition: ke.h:33
struct _KPCR * PKPCR
#define FastFence
Definition: ke.h:50
CONTEXT
Definition: ke.h:284
$endif(_WDMDDK_) $if(_NTDDK_) typedef struct _NEON128
Definition: ke.h:202
_Requires_lock_held_ SpinLock _Releases_lock_ SpinLock _In_ _IRQL_restores_ KIRQL NewIrql
Definition: ke.h:114
#define KeGetPcr()
Definition: ke.h:26
#define STATUS_SUCCESS
Definition: shellext.h:65
ULONG Dummy
Definition: ke.h:25
Definition: ke.h:290
ULONG StallScaleFactor
Definition: ke.h:314
ULONG64 Unused[2]
Definition: ke.h:306
struct _KPRCB * CurrentPrcb
Definition: ke.h:300
PVOID Used_Self
Definition: ke.h:302
ULONG64 UserRsp
Definition: ke.h:298
USHORT MinorVersion
Definition: ke.h:313
PVOID Unused1[3]
Definition: ke.h:315
union _KIDTENTRY64 * IdtBase
Definition: ke.h:305
UCHAR SecondLevelCacheAssociativity
Definition: ke.h:308
UCHAR Fill0
Definition: ke.h:310
ULONG SecondLevelCacheSize
Definition: ke.h:317
struct _KTSS64 * TssBase
Definition: ke.h:297
ULONG PcrAlign1[24]
Definition: ke.h:322
ULONG KernelReserved[15]
Definition: ke.h:316
PVOID KdVersionBlock
Definition: ke.h:320
NT_TIB NtTib
Definition: ke.h:293
PVOID Unused3
Definition: ke.h:321
USHORT MajorVersion
Definition: ke.h:312
UCHAR ObsoleteNumber
Definition: ke.h:309
union _KGDTENTRY64 * GdtBase
Definition: ke.h:296
ULONG Unused2
Definition: ke.h:319
struct _KPCR * Self
Definition: ke.h:299
PKSPIN_LOCK_QUEUE LockArray
Definition: ke.h:301
ULONG Unused0[3]
Definition: ke.h:311
ULONG HalReserved[16]
Definition: ke.h:318
KIRQL Irql
Definition: ke.h:307
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define FORCEINLINE
Definition: wdftypes.h:67
#define _WDMDDK_
Definition: wdm.template.h:26
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:792
XSAVE_FORMAT
Definition: ketypes.h:951
M128A
Definition: ketypes.h:925
unsigned char UCHAR
Definition: xmlstorage.h:181