#define KERNEL_LARGE_STACK_SIZE 61440
#define KERNEL_LARGE_STACK_COMMIT 12288
+#define EXCEPTION_READ_FAULT 0
+#define EXCEPTION_WRITE_FAULT 1
+#define EXCEPTION_EXECUTE_FAULT 8
+
#define DPFLTR_ERROR_LEVEL 0
#define DPFLTR_WARNING_LEVEL 1
#define DPFLTR_TRACE_LEVEL 2
#ifdef _X86_
+#define SIZE_OF_80387_REGISTERS 80
+#define CONTEXT_i386 0x10000
+#define CONTEXT_i486 0x10000
+#define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
+#define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
+#define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
+#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
+#define MAXIMUM_SUPPORTED_EXTENSION 512
+
+typedef struct _FLOATING_SAVE_AREA {
+ ULONG ControlWord;
+ ULONG StatusWord;
+ ULONG TagWord;
+ ULONG ErrorOffset;
+ ULONG ErrorSelector;
+ ULONG DataOffset;
+ ULONG DataSelector;
+ UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
+ ULONG Cr0NpxState;
+} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
+
+typedef struct _CONTEXT {
+ ULONG ContextFlags;
+ ULONG Dr0;
+ ULONG Dr1;
+ ULONG Dr2;
+ ULONG Dr3;
+ ULONG Dr6;
+ ULONG Dr7;
+ FLOATING_SAVE_AREA FloatSave;
+ ULONG SegGs;
+ ULONG SegFs;
+ ULONG SegEs;
+ ULONG SegDs;
+ ULONG Edi;
+ ULONG Esi;
+ ULONG Ebx;
+ ULONG Edx;
+ ULONG Ecx;
+ ULONG Eax;
+ ULONG Ebp;
+ ULONG Eip;
+ ULONG SegCs;
+ ULONG EFlags;
+ ULONG Esp;
+ ULONG SegSs;
+ UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+
//
// Types to use to contain PFNs and their counts.
//
#elif defined(__x86_64__)
+#define CONTEXT_AMD64 0x100000
+#if !defined(RC_INVOKED)
+#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
+#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
+#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
+#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
+#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
+
+#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
+#define CONTEXT_SERVICE_ACTIVE 0x10000000
+#define CONTEXT_EXCEPTION_REQUEST 0x40000000
+#define CONTEXT_EXCEPTION_REPORTING 0x80000000
+#endif
+
typedef struct DECLSPEC_ALIGN(16) _M128A {
ULONGLONG Low;
LONGLONG High;
#define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
#define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
+extern NTKERNELAPI PVOID MmHighestUserAddress;
+extern NTKERNELAPI PVOID MmSystemRangeStart;
+extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
+
+#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
+#define MM_SYSTEM_RANGE_START MmSystemRangeStart
+#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
#define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
//#define ExInterlockedFlushSList(Head) ExpInterlockedFlushSList(Head)
#if !defined(_WINBASE_)
-//#define InterlockedPopEntrySList(Head) ExpInterlockedPopEntrySList(Head)
-//#define InterlockedPushEntrySList(Head, Entry) ExpInterlockedPushEntrySList(Head, Entry)
+#define InterlockedPopEntrySList(Head) ExpInterlockedPopEntrySList(Head)
+#define InterlockedPushEntrySList(Head, Entry) ExpInterlockedPushEntrySList(Head, Entry)
//#define InterlockedFlushSList(Head) ExpInterlockedFlushSList(Head)
//#define QueryDepthSList(Head) ExQueryDepthSList(Head)
#endif // !defined(_WINBASE_)
IoGetRelatedDeviceObject(
IN PFILE_OBJECT FileObject);
-NTKERNELAPI
-ULONG
-NTAPI
-IoGetRemainingStackSize(
- VOID);
-
NTKERNELAPI
VOID
NTAPI
OUT PULONG_PTR LowLimit,
OUT PULONG_PTR HighLimit);
+FORCEINLINE
+ULONG_PTR
+IoGetRemainingStackSize(
+ VOID
+)
+{
+ ULONG_PTR End, Begin;
+ ULONG_PTR Result;
+
+ IoGetStackLimits(&Begin, &End);
+ Result = (ULONG_PTR)(&End) - Begin;
+ return Result;
+}
+
NTKERNELAPI
VOID
NTAPI