- Remove KTSS_NOIOMP from NDK.

- Fix KTSS definition.
- Fix KTRAP_FRAME definition.
- Fix RTL_PROCESS_BACKTRACE_INFORMATION and RTL_PROCESS_BACKTRACES definitions.
- Fix/rename RUNDOWN_DESCRIPTOR definition.
- Rename PPF_ definitions to RTL_USER_PROCESS_PARAMETERS_
- Setup a global _REACTOS_ define when code is compiled.
- #ifdef out the multiboot flags from the NDK so they'll only be available for ReactOS. Dirty 'hack' until we stop using them.
- Update NDK Fixme list, since all major bugs are fixed now.

svn path=/trunk/; revision=19693
This commit is contained in:
Alex Ionescu 2005-11-27 18:24:32 +00:00
parent bdd569bc33
commit 125b0fa6a3
18 changed files with 135 additions and 182 deletions

View file

@ -772,21 +772,21 @@ VOID
MpsIRQTrapFrameToTrapFrame(PKIRQ_TRAPFRAME IrqTrapFrame, MpsIRQTrapFrameToTrapFrame(PKIRQ_TRAPFRAME IrqTrapFrame,
PKTRAP_FRAME TrapFrame) PKTRAP_FRAME TrapFrame)
{ {
TrapFrame->Gs = (USHORT)IrqTrapFrame->Gs; TrapFrame->SegGs = (USHORT)IrqTrapFrame->Gs;
TrapFrame->Fs = (USHORT)IrqTrapFrame->Fs; TrapFrame->SegFs = (USHORT)IrqTrapFrame->Fs;
TrapFrame->Es = (USHORT)IrqTrapFrame->Es; TrapFrame->SegEs = (USHORT)IrqTrapFrame->Es;
TrapFrame->Ds = (USHORT)IrqTrapFrame->Ds; TrapFrame->SegDs = (USHORT)IrqTrapFrame->Ds;
TrapFrame->Eax = IrqTrapFrame->Eax; TrapFrame->Eax = IrqTrapFrame->Eax;
TrapFrame->Ecx = IrqTrapFrame->Ecx; TrapFrame->Ecx = IrqTrapFrame->Ecx;
TrapFrame->Edx = IrqTrapFrame->Edx; TrapFrame->Edx = IrqTrapFrame->Edx;
TrapFrame->Ebx = IrqTrapFrame->Ebx; TrapFrame->Ebx = IrqTrapFrame->Ebx;
TrapFrame->Esp = IrqTrapFrame->Esp; TrapFrame->HardwareEsp = IrqTrapFrame->Esp;
TrapFrame->Ebp = IrqTrapFrame->Ebp; TrapFrame->Ebp = IrqTrapFrame->Ebp;
TrapFrame->Esi = IrqTrapFrame->Esi; TrapFrame->Esi = IrqTrapFrame->Esi;
TrapFrame->Edi = IrqTrapFrame->Edi; TrapFrame->Edi = IrqTrapFrame->Edi;
TrapFrame->Eip = IrqTrapFrame->Eip; TrapFrame->Eip = IrqTrapFrame->Eip;
TrapFrame->Cs = IrqTrapFrame->Cs; TrapFrame->SegCs = IrqTrapFrame->Cs;
TrapFrame->Eflags = IrqTrapFrame->Eflags; TrapFrame->EFlags = IrqTrapFrame->Eflags;
} }
VOID VOID

View file

@ -271,13 +271,13 @@ typedef struct _EX_FAST_REF
} EX_FAST_REF, *PEX_FAST_REF; } EX_FAST_REF, *PEX_FAST_REF;
// //
// FIXME // Executive Fast Reference Wait Block
// //
typedef struct _RUNDOWN_DESCRIPTOR typedef struct _EX_RUNDOWN_WAIT_BLOCK
{ {
ULONG_PTR References; ULONG_PTR Count;
KEVENT RundownEvent; KEVENT RundownEvent;
} RUNDOWN_DESCRIPTOR, *PRUNDOWN_DESCRIPTOR; } EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
// //
// Callback Object // Callback Object

View file

@ -2,23 +2,17 @@ Complete list of NDK Fixmes before 1.0 Release (Nov 27th 2005)
-------------------------------------------------------------- --------------------------------------------------------------
______________________________________________________________________________________ ______________________________________________________________________________________
[CRITICAL] - Breaking compatibility with official structures. [CRITICAL] - Breaking compatibility with official structures.
|pstypes.h - EPROCESS has ReactOS only fields. Includes ReactOS Internal header. |pstypes.h - EPROCESS has ReactOS only fields. Includes ReactOS Internal header. IFDEF_OUT
|pstypes.h - W32_CALLOUT_DATA has ReactOS only fields. |pstypes.h - W32_CALLOUT_DATA has ReactOS only fields. IFDEF-OUT
|obtypes.h - Object callbacks are ReactOS only definitions. |obtypes.h - Object callbacks are ReactOS only definitions. IFDEF-OUT ADDREAL
|obtypes.h - Object Header includes ReactOS only type. |obtypes.h - Object Header includes ReactOS only type. IFDEF-OUT
|mmtypes.h - _MADDRESS_SPACE is ReactOS only field. |mmtypes.h - _MADDRESS_SPACE is ReactOS only field. IFDEF-OUT
|ketypes.h - _KPROFILE needs to be updated with new definitions. |ketypes.h - _KPROFILE needs to be updated with new definitions. FIXFIX
|ketypes.h - _KINTERRUPT needs to be verified with new definitions. |ketypes.h - _KINTERRUPT needs to be verified with new definitions. FIXFIX
|haltypes.h - Loader Parameter Block is ReactOS Version, not NT. |haltypes.h - Loader Parameter Block is ReactOS Version, not NT. IFDEF-OUT ADDREAL
| |
[MAJOR] - Using incorrect, missing, or invalid names or definitions. [MAJOR] - Using incorrect, missing, or invalid names or definitions.
|i386/ketypes.h - _KTRAP_FRAME definition is broken. |extypes.h - Classes 13, 20, 30, 31, 49, 51, 52, 54+ are undefined. WONTFIX
|i386/ketypes.h - _KTSSNOIOPM is not an official type.
|rtltypes.h - PPF_ Defines don't seem to be the real names (try to find them).
|rtltypes.h - _RTL_PROCESS_BACKTRACE_INFORMATION isn't done.
|haltypes.h - Multi-Boot flags are ReactOS Only.
|extypes.h - _RUNDOWN_DESCRIPTOR is possibly incorrect/unofficial.
|extypes.h - Classes 13, 20, 30, 31, 49, 51, 52, 54+ are undefined.
|_____________________________________________________________________________________ |_____________________________________________________________________________________

View file

@ -27,8 +27,9 @@ Author:
#ifndef NTOS_MODE_USER #ifndef NTOS_MODE_USER
// //
// Multi-Boot Flags (FIXME) // Multi-Boot Flags (REMOVE ME)
// //
#ifdef _REACTOS_
#define MB_FLAGS_MEM_INFO (0x1) #define MB_FLAGS_MEM_INFO (0x1)
#define MB_FLAGS_BOOT_DEVICE (0x2) #define MB_FLAGS_BOOT_DEVICE (0x2)
#define MB_FLAGS_COMMAND_LINE (0x4) #define MB_FLAGS_COMMAND_LINE (0x4)
@ -42,6 +43,7 @@ Author:
#define MB_FLAGS_APM_TABLE (0x400) #define MB_FLAGS_APM_TABLE (0x400)
#define MB_FLAGS_GRAPHICS_TABLE (0x800) #define MB_FLAGS_GRAPHICS_TABLE (0x800)
#define MB_FLAGS_ACPI_TABLE (0x1000) #define MB_FLAGS_ACPI_TABLE (0x1000)
#endif
// //
// HalShutdownSystem Types // HalShutdownSystem Types

View file

@ -90,11 +90,11 @@ typedef struct _FX_SAVE_AREA
// //
typedef struct _KTRAP_FRAME typedef struct _KTRAP_FRAME
{ {
ULONG DebugEbp; ULONG DbgEbp;
ULONG DebugEip; ULONG DbgEip;
ULONG DebugArgMark; ULONG DbgArgMark;
ULONG DebugPointer; ULONG DbgArgPointer;
ULONG TempCs; ULONG TempSegCs;
ULONG TempEsp; ULONG TempEsp;
ULONG Dr0; ULONG Dr0;
ULONG Dr1; ULONG Dr1;
@ -102,29 +102,29 @@ typedef struct _KTRAP_FRAME
ULONG Dr3; ULONG Dr3;
ULONG Dr6; ULONG Dr6;
ULONG Dr7; ULONG Dr7;
ULONG Gs; ULONG SegGs;
ULONG Es; ULONG SegEs;
ULONG Ds; ULONG SegDs;
ULONG Edx; ULONG Edx;
ULONG Ecx; ULONG Ecx;
ULONG Eax; ULONG Eax;
ULONG PreviousMode; ULONG PreviousPreviousMode;
PVOID ExceptionList; struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
ULONG Fs; ULONG SegFs;
ULONG Edi; ULONG Edi;
ULONG Esi; ULONG Esi;
ULONG Ebx; ULONG Ebx;
ULONG Ebp; ULONG Ebp;
ULONG ErrorCode; ULONG ErrCode;
ULONG Eip; ULONG Eip;
ULONG Cs; ULONG SegCs;
ULONG Eflags; ULONG EFlags;
ULONG Esp; ULONG HardwareEsp;
ULONG Ss; ULONG HardwareSegSs;
ULONG V86_Es; ULONG V86Es;
ULONG V86_Ds; ULONG V86Ds;
ULONG V86_Fs; ULONG V86Fs;
ULONG V86_Gs; ULONG V86Gs;
} KTRAP_FRAME, *PKTRAP_FRAME; } KTRAP_FRAME, *PKTRAP_FRAME;
// //
@ -460,100 +460,46 @@ typedef struct _KIPCR
} KIPCR, *PKIPCR; } KIPCR, *PKIPCR;
#pragma pack(pop) #pragma pack(pop)
//
// FIXME: TSS without I/O Privilege Map
//
#include <pshpack1.h>
typedef struct _KTSSNOIOPM
{
USHORT PreviousTask;
USHORT Reserved1;
ULONG Esp0;
USHORT Ss0;
USHORT Reserved2;
ULONG Esp1;
USHORT Ss1;
USHORT Reserved3;
ULONG Esp2;
USHORT Ss2;
USHORT Reserved4;
ULONG Cr3;
ULONG Eip;
ULONG Eflags;
ULONG Eax;
ULONG Ecx;
ULONG Edx;
ULONG Ebx;
ULONG Esp;
ULONG Ebp;
ULONG Esi;
ULONG Edi;
USHORT Es;
USHORT Reserved5;
USHORT Cs;
USHORT Reserved6;
USHORT Ss;
USHORT Reserved7;
USHORT Ds;
USHORT Reserved8;
USHORT Fs;
USHORT Reserved9;
USHORT Gs;
USHORT Reserved10;
USHORT Ldt;
USHORT Reserved11;
USHORT Trap;
USHORT IoMapBase;
/* no interrupt redirection map */
UCHAR IoBitmap[1];
} KTSSNOIOPM;
// //
// TSS Definition // TSS Definition
// //
typedef struct _KiIoAccessMap
{
UCHAR DirectionMap[32];
UCHAR IoMap[8196];
} KIIO_ACCESS_MAP;
#include <pshpack1.h>
typedef struct _KTSS typedef struct _KTSS
{ {
USHORT PreviousTask; USHORT Backlink;
USHORT Reserved1; USHORT Reserved0;
ULONG Esp0; ULONG Esp0;
USHORT Ss0; USHORT Ss0;
USHORT Reserved2; USHORT Reserved1;
ULONG Esp1; ULONG NotUsed1[4];
USHORT Ss1; ULONG CR3;
USHORT Reserved3;
ULONG Esp2;
USHORT Ss2;
USHORT Reserved4;
ULONG Cr3;
ULONG Eip; ULONG Eip;
ULONG Eflags; ULONG NotUsed2[9];
ULONG Eax;
ULONG Ecx;
ULONG Edx;
ULONG Ebx;
ULONG Esp;
ULONG Ebp;
ULONG Esi;
ULONG Edi;
USHORT Es; USHORT Es;
USHORT Reserved5; USHORT Reserved2;
USHORT Cs; USHORT Cs;
USHORT Reserved6; USHORT Reserved3;
USHORT Ss; USHORT Ss;
USHORT Reserved7; USHORT Reserved4;
USHORT Ds; USHORT Ds;
USHORT Reserved8; USHORT Reserved5;
USHORT Fs; USHORT Fs;
USHORT Reserved9; USHORT Reserved6;
USHORT Gs; USHORT Gs;
USHORT Reserved10; USHORT Reserved7;
USHORT Ldt; USHORT LDT;
USHORT Reserved11; USHORT Reserved8;
USHORT Trap; USHORT Flags;
USHORT IoMapBase; USHORT IoMapBase;
/* no interrupt redirection map */ KIIO_ACCESS_MAP IoMaps[1];
UCHAR IoBitmap[8193]; UCHAR IntDirectionMap[32];
} KTSS; } KTSS, *PKTSS;
#include <poppack.h> #include <poppack.h>
// //

View file

@ -25,6 +25,12 @@ Author:
#include <umtypes.h> #include <umtypes.h>
#include <pstypes.h> #include <pstypes.h>
//
// Internal helper macro
//
#define N_ROUND_UP(x,s) \
(((ULONG)(x)+(s)-1) & ~((ULONG)(s)-1))
// //
// Maximum message size that can be sent through an LPC Port without a section // Maximum message size that can be sent through an LPC Port without a section
// //
@ -234,9 +240,9 @@ typedef struct _CLIENT_DIED_MSG
// Maximum total Kernel-Mode LPC Message Structure Size // Maximum total Kernel-Mode LPC Message Structure Size
// //
#define LPCP_MAX_MESSAGE_SIZE \ #define LPCP_MAX_MESSAGE_SIZE \
ALIGN_UP(PORT_MAXIMUM_MESSAGE_LENGTH + \ N_ROUND_UP(PORT_MAXIMUM_MESSAGE_LENGTH + \
sizeof(LPCP_MESSAGE) + \ sizeof(LPCP_MESSAGE) + \
sizeof(LPCP_CONNECTION_MESSAGE), sizeof(ULONGLONG) * 2) sizeof(LPCP_CONNECTION_MESSAGE), 16)
// //
// Maximum actual LPC Message Length // Maximum actual LPC Message Length

View file

@ -31,17 +31,17 @@ Author:
#define RTL_MAXIMUM_ATOM_LENGTH 255 #define RTL_MAXIMUM_ATOM_LENGTH 255
// //
// Process Parameters Flags (FIXME: Rename) // Process Parameters Flags
// //
#define PPF_NORMALIZED 0x01 #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED 0x01
#define PPF_PROFILE_USER 0x02 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER 0x02
#define PPF_PROFILE_SERVER 0x04 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x04
#define PPF_PROFILE_KERNEL 0x08 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x08
#define PPF_UNKNOWN 0x10 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN 0x10
#define PPF_RESERVE_1MB 0x20 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB 0x20
#define PPF_DISABLE_HEAP_CHECKS 0x100 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS 0x100
#define PPF_PROCESS_OR_1 0x200 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1 0x200
#define PPF_PROCESS_OR_2 0x400 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2 0x400
// //
// Exception Flags // Exception Flags
@ -613,14 +613,20 @@ typedef struct _RTL_PROCESS_LOCKS
typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION typedef struct _RTL_PROCESS_BACKTRACE_INFORMATION
{ {
/* FIXME */ PVOID SymbolicBackTrace;
ULONG Unknown; ULONG TraceCount;
USHORT Index;
USHORT Depth;
PVOID BackTrace[16];
} RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION; } RTL_PROCESS_BACKTRACE_INFORMATION, *PRTL_PROCESS_BACKTRACE_INFORMATION;
typedef struct _RTL_PROCESS_BACKTRACES typedef struct _RTL_PROCESS_BACKTRACES
{ {
ULONG BackTraceCount; ULONG CommittedMemory;
RTL_PROCESS_BACKTRACE_INFORMATION BackTraceEntry[1]; ULONG ReservedMemory;
ULONG NumberOfBackTraceLookups;
ULONG NumberOfBackTraces;
RTL_PROCESS_BACKTRACE_INFORMATION BackTraces[1];
} RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES; } RTL_PROCESS_BACKTRACES, *PRTL_PROCESS_BACKTRACES;
typedef struct _RTL_DEBUG_BUFFER typedef struct _RTL_DEBUG_BUFFER

View file

@ -580,13 +580,13 @@ BasepInitializeEnvironment(HANDLE ProcessHandle,
/* Handle some Parameter Flags */ /* Handle some Parameter Flags */
ProcessParameters->ConsoleFlags = (CreationFlags & CREATE_NEW_PROCESS_GROUP); ProcessParameters->ConsoleFlags = (CreationFlags & CREATE_NEW_PROCESS_GROUP);
ProcessParameters->Flags |= (CreationFlags & PROFILE_USER) ? ProcessParameters->Flags |= (CreationFlags & PROFILE_USER) ?
PPF_PROFILE_USER : 0; RTL_USER_PROCESS_PARAMETERS_PROFILE_USER : 0;
ProcessParameters->Flags |= (CreationFlags & PROFILE_KERNEL) ? ProcessParameters->Flags |= (CreationFlags & PROFILE_KERNEL) ?
PPF_PROFILE_KERNEL : 0; RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL : 0;
ProcessParameters->Flags |= (CreationFlags & PROFILE_SERVER) ? ProcessParameters->Flags |= (CreationFlags & PROFILE_SERVER) ?
PPF_PROFILE_SERVER : 0; RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER : 0;
ProcessParameters->Flags |= (NtCurrentPeb()->ProcessParameters->Flags & ProcessParameters->Flags |= (NtCurrentPeb()->ProcessParameters->Flags &
PPF_DISABLE_HEAP_CHECKS); RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS);
/* Write the Parameter Block */ /* Write the Parameter Block */
Status = NtWriteVirtualMemory(ProcessHandle, Status = NtWriteVirtualMemory(ProcessHandle,

View file

@ -139,7 +139,7 @@ RtlCreateProcessParameters(PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
Param->MaximumLength = RegionSize; Param->MaximumLength = RegionSize;
Param->Length = Length; Param->Length = Length;
Param->Flags = PPF_NORMALIZED; Param->Flags = RTL_USER_PROCESS_PARAMETERS_NORMALIZED;
Param->Environment = Environment; Param->Environment = Environment;
Param->CurrentDirectory.Handle = CurrentDirectoryHandle; Param->CurrentDirectory.Handle = CurrentDirectoryHandle;
Param->ConsoleHandle = ConsoleHandle; Param->ConsoleHandle = ConsoleHandle;
@ -238,7 +238,7 @@ RtlDestroyProcessParameters(PRTL_USER_PROCESS_PARAMETERS ProcessParameters)
PRTL_USER_PROCESS_PARAMETERS NTAPI PRTL_USER_PROCESS_PARAMETERS NTAPI
RtlDeNormalizeProcessParams(PRTL_USER_PROCESS_PARAMETERS Params) RtlDeNormalizeProcessParams(PRTL_USER_PROCESS_PARAMETERS Params)
{ {
if (Params && (Params->Flags & PPF_NORMALIZED)) if (Params && (Params->Flags & RTL_USER_PROCESS_PARAMETERS_NORMALIZED))
{ {
DENORMALIZE(Params->CurrentDirectory.DosPath.Buffer, Params); DENORMALIZE(Params->CurrentDirectory.DosPath.Buffer, Params);
DENORMALIZE(Params->DllPath.Buffer, Params); DENORMALIZE(Params->DllPath.Buffer, Params);
@ -249,7 +249,7 @@ RtlDeNormalizeProcessParams(PRTL_USER_PROCESS_PARAMETERS Params)
DENORMALIZE(Params->ShellInfo.Buffer, Params); DENORMALIZE(Params->ShellInfo.Buffer, Params);
DENORMALIZE(Params->RuntimeData.Buffer, Params); DENORMALIZE(Params->RuntimeData.Buffer, Params);
Params->Flags &= ~PPF_NORMALIZED; Params->Flags &= ~RTL_USER_PROCESS_PARAMETERS_NORMALIZED;
} }
return Params; return Params;
@ -263,7 +263,7 @@ RtlDeNormalizeProcessParams(PRTL_USER_PROCESS_PARAMETERS Params)
PRTL_USER_PROCESS_PARAMETERS NTAPI PRTL_USER_PROCESS_PARAMETERS NTAPI
RtlNormalizeProcessParams(PRTL_USER_PROCESS_PARAMETERS Params) RtlNormalizeProcessParams(PRTL_USER_PROCESS_PARAMETERS Params)
{ {
if (Params && !(Params->Flags & PPF_NORMALIZED)) if (Params && !(Params->Flags & RTL_USER_PROCESS_PARAMETERS_NORMALIZED))
{ {
NORMALIZE(Params->CurrentDirectory.DosPath.Buffer, Params); NORMALIZE(Params->CurrentDirectory.DosPath.Buffer, Params);
NORMALIZE(Params->DllPath.Buffer, Params); NORMALIZE(Params->DllPath.Buffer, Params);
@ -274,7 +274,7 @@ RtlNormalizeProcessParams(PRTL_USER_PROCESS_PARAMETERS Params)
NORMALIZE(Params->ShellInfo.Buffer, Params); NORMALIZE(Params->ShellInfo.Buffer, Params);
NORMALIZE(Params->RuntimeData.Buffer, Params); NORMALIZE(Params->RuntimeData.Buffer, Params);
Params->Flags |= PPF_NORMALIZED; Params->Flags |= RTL_USER_PROCESS_PARAMETERS_NORMALIZED;
} }
return Params; return Params;

View file

@ -80,7 +80,7 @@ RtlpInitEnvironment(HANDLE ProcessHandle,
ProcessHandle, Peb, ProcessParameters); ProcessHandle, Peb, ProcessParameters);
/* Give the caller 1MB if he requested it */ /* Give the caller 1MB if he requested it */
if (ProcessParameters->Flags & PPF_RESERVE_1MB) if (ProcessParameters->Flags & RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB)
{ {
/* Give 1MB starting at 0x4 */ /* Give 1MB starting at 0x4 */
BaseAddress = (PVOID)4; BaseAddress = (PVOID)4;

View file

@ -250,7 +250,6 @@ ExecuteRuntimeAsserts(VOID)
ASSERT(FIELD_OFFSET(KIPCR, PrcbData) + FIELD_OFFSET(KPRCB, CurrentThread) == KPCR_CURRENT_THREAD); ASSERT(FIELD_OFFSET(KIPCR, PrcbData) + FIELD_OFFSET(KPRCB, CurrentThread) == KPCR_CURRENT_THREAD);
ASSERT(FIELD_OFFSET(KIPCR, PrcbData) + FIELD_OFFSET(KPRCB, NpxThread) == KPCR_NPX_THREAD); ASSERT(FIELD_OFFSET(KIPCR, PrcbData) + FIELD_OFFSET(KPRCB, NpxThread) == KPCR_NPX_THREAD);
ASSERT(FIELD_OFFSET(KTSS, Esp0) == KTSS_ESP0); ASSERT(FIELD_OFFSET(KTSS, Esp0) == KTSS_ESP0);
ASSERT(FIELD_OFFSET(KTSS, Eflags) == KTSS_EFLAGS);
ASSERT(FIELD_OFFSET(KTSS, IoMapBase) == KTSS_IOMAPBASE); ASSERT(FIELD_OFFSET(KTSS, IoMapBase) == KTSS_IOMAPBASE);
ASSERT(sizeof(FX_SAVE_AREA) == SIZEOF_FX_SAVE_AREA); ASSERT(sizeof(FX_SAVE_AREA) == SIZEOF_FX_SAVE_AREA);
} }

View file

@ -123,7 +123,7 @@ ExReleaseRundownProtectionEx (
if (Current & EX_RUNDOWN_ACTIVE) if (Current & EX_RUNDOWN_ACTIVE)
{ {
/* Get Pointer */ /* Get Pointer */
PRUNDOWN_DESCRIPTOR RundownDescriptor = (PRUNDOWN_DESCRIPTOR)(Current & ~EX_RUNDOWN_ACTIVE); PEX_RUNDOWN_WAIT_BLOCK RundownDescriptor = (PEX_RUNDOWN_WAIT_BLOCK)(Current & ~EX_RUNDOWN_ACTIVE);
if (RundownDescriptor == NULL) if (RundownDescriptor == NULL)
{ {
@ -131,9 +131,9 @@ ExReleaseRundownProtectionEx (
break; break;
} }
Current = RundownDescriptor->References; Current = RundownDescriptor->Count;
/* Decrease RundownDescriptor->References by Count references */ /* Decrease RundownDescriptor->Count by Count Count */
for (;;) for (;;)
{ {
ULONG_PTR PrevCount, NewCount; ULONG_PTR PrevCount, NewCount;
@ -144,12 +144,12 @@ ExReleaseRundownProtectionEx (
} }
else else
{ {
NewCount = ((RundownDescriptor->References - (Count >> EX_RUNDOWN_COUNT_SHIFT)) << EX_RUNDOWN_COUNT_SHIFT) | EX_RUNDOWN_ACTIVE; NewCount = ((RundownDescriptor->Count - (Count >> EX_RUNDOWN_COUNT_SHIFT)) << EX_RUNDOWN_COUNT_SHIFT) | EX_RUNDOWN_ACTIVE;
} }
#ifdef _WIN64 #ifdef _WIN64
PrevCount = (ULONG_PTR)InterlockedCompareExchange64((LONGLONG*)&RundownDescriptor->References, (LONGLONG)NewCount, (LONGLONG)Current); PrevCount = (ULONG_PTR)InterlockedCompareExchange64((LONGLONG*)&RundownDescriptor->Count, (LONGLONG)NewCount, (LONGLONG)Current);
#else #else
PrevCount = (ULONG_PTR)InterlockedCompareExchange((LONG*)&RundownDescriptor->References, (LONG)NewCount, (LONG)Current); PrevCount = (ULONG_PTR)InterlockedCompareExchange((LONG*)&RundownDescriptor->Count, (LONG)NewCount, (LONG)Current);
#endif #endif
if (PrevCount == Current) if (PrevCount == Current)
{ {
@ -227,7 +227,7 @@ ExWaitForRundownProtectionRelease (
) )
{ {
ULONG_PTR PrevCount, NewPtr, PrevPtr; ULONG_PTR PrevCount, NewPtr, PrevPtr;
RUNDOWN_DESCRIPTOR RundownDescriptor; EX_RUNDOWN_WAIT_BLOCK RundownDescriptor;
PAGED_CODE(); PAGED_CODE();
@ -236,9 +236,9 @@ ExWaitForRundownProtectionRelease (
if (PrevCount != 0 && !(PrevCount & EX_RUNDOWN_ACTIVE)) if (PrevCount != 0 && !(PrevCount & EX_RUNDOWN_ACTIVE))
{ {
/* save the reference counter */ /* save the reference counter */
RundownDescriptor.References = PrevCount >> EX_RUNDOWN_COUNT_SHIFT; RundownDescriptor.Count = PrevCount >> EX_RUNDOWN_COUNT_SHIFT;
/* Pending references... wait on them to be closed with an event */ /* Pending Count... wait on them to be closed with an event */
KeInitializeEvent(&RundownDescriptor.RundownEvent, NotificationEvent, FALSE); KeInitializeEvent(&RundownDescriptor.RundownEvent, NotificationEvent, FALSE);
ASSERT(!((ULONG_PTR)&RundownDescriptor & EX_RUNDOWN_ACTIVE)); ASSERT(!((ULONG_PTR)&RundownDescriptor & EX_RUNDOWN_ACTIVE));
@ -267,7 +267,7 @@ ExWaitForRundownProtectionRelease (
PrevCount = PrevPtr; PrevCount = PrevPtr;
/* save the changed reference counter and try again */ /* save the changed reference counter and try again */
RundownDescriptor.References = PrevCount >> EX_RUNDOWN_COUNT_SHIFT; RundownDescriptor.Count = PrevCount >> EX_RUNDOWN_COUNT_SHIFT;
} }
} }
} }

View file

@ -133,18 +133,18 @@ static CPU_REGISTER GspRegisters[NUMREGS] =
{ 4, FIELD_OFFSET(KTRAP_FRAME, Ecx), FIELD_OFFSET(CONTEXT, Ecx), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, Ecx), FIELD_OFFSET(CONTEXT, Ecx), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Edx), FIELD_OFFSET(CONTEXT, Edx), FALSE }, { 4, FIELD_OFFSET(KTRAP_FRAME, Edx), FIELD_OFFSET(CONTEXT, Edx), FALSE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Ebx), FIELD_OFFSET(CONTEXT, Ebx), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, Ebx), FIELD_OFFSET(CONTEXT, Ebx), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Esp), FIELD_OFFSET(CONTEXT, Esp), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, HardwareEsp ), FIELD_OFFSET(CONTEXT, Esp), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, DebugEbp), FIELD_OFFSET(CONTEXT, Ebp), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, DbgEbp), FIELD_OFFSET(CONTEXT, Ebp), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Esi), FIELD_OFFSET(CONTEXT, Esi), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, Esi), FIELD_OFFSET(CONTEXT, Esi), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Edi), FIELD_OFFSET(CONTEXT, Edi), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, Edi), FIELD_OFFSET(CONTEXT, Edi), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, DebugEip), FIELD_OFFSET(CONTEXT, Eip), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, DbgEip), FIELD_OFFSET(CONTEXT, Eip), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Eflags), FIELD_OFFSET(CONTEXT, EFlags), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, EFlags), FIELD_OFFSET(CONTEXT, EFlags), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Cs), FIELD_OFFSET(CONTEXT, SegCs), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, SegCs), FIELD_OFFSET(CONTEXT, SegCs), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Ss), FIELD_OFFSET(CONTEXT, SegSs), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, HardwareSegSs), FIELD_OFFSET(CONTEXT, SegSs), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Ds), FIELD_OFFSET(CONTEXT, SegDs), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, SegDs), FIELD_OFFSET(CONTEXT, SegDs), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Es), FIELD_OFFSET(CONTEXT, SegEs), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, SegEs), FIELD_OFFSET(CONTEXT, SegEs), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Fs), FIELD_OFFSET(CONTEXT, SegFs), TRUE }, { 4, FIELD_OFFSET(KTRAP_FRAME, SegFs), FIELD_OFFSET(CONTEXT, SegFs), TRUE },
{ 4, FIELD_OFFSET(KTRAP_FRAME, Gs), FIELD_OFFSET(CONTEXT, SegGs), TRUE } { 4, FIELD_OFFSET(KTRAP_FRAME, SegGs), FIELD_OFFSET(CONTEXT, SegGs), TRUE }
}; };
static PCHAR GspThreadStates[DeferredReady+1] = static PCHAR GspThreadStates[DeferredReady+1] =
@ -564,7 +564,7 @@ static LONG
GspGetEspFromTrapFrame(PKTRAP_FRAME TrapFrame) GspGetEspFromTrapFrame(PKTRAP_FRAME TrapFrame)
{ {
return KeGetPreviousMode() == KernelMode return KeGetPreviousMode() == KernelMode
? (LONG) &TrapFrame->Esp : (LONG)TrapFrame->Esp; ? (LONG) &TrapFrame->HardwareEsp : (LONG)TrapFrame->HardwareEsp;
} }

View file

@ -906,7 +906,7 @@ KiInitializeUserApc(IN PKEXCEPTION_FRAME ExceptionFrame,
KeGetCurrentThread()->TrapFrame); KeGetCurrentThread()->TrapFrame);
/* Don't deliver APCs in V86 mode */ /* Don't deliver APCs in V86 mode */
if (TrapFrame->Eflags & X86_EFLAGS_VM) return; if (TrapFrame->EFlags & X86_EFLAGS_VM) return;
/* Save the full context */ /* Save the full context */
Context.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS; Context.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
@ -927,7 +927,7 @@ KiInitializeUserApc(IN PKEXCEPTION_FRAME ExceptionFrame,
/* Run at APC dispatcher */ /* Run at APC dispatcher */
TrapFrame->Eip = (ULONG)KeUserApcDispatcher; TrapFrame->Eip = (ULONG)KeUserApcDispatcher;
TrapFrame->Esp = Stack; TrapFrame->HardwareEsp = Stack;
/* Setup the stack */ /* Setup the stack */
*(PULONG_PTR)(Stack + 0 * sizeof(ULONG_PTR)) = (ULONG_PTR)NormalRoutine; *(PULONG_PTR)(Stack + 0 * sizeof(ULONG_PTR)) = (ULONG_PTR)NormalRoutine;

View file

@ -260,8 +260,8 @@ KeUpdateRunTime(
* Cs bit 0 is always set for user mode if we are in protected mode. * Cs bit 0 is always set for user mode if we are in protected mode.
* V86 mode is counted as user time. * V86 mode is counted as user time.
*/ */
if (TrapFrame->Cs & 0x1 || if (TrapFrame->SegCs & MODE_MASK ||
TrapFrame->Eflags & X86_EFLAGS_VM) TrapFrame->EFlags & X86_EFLAGS_VM)
{ {
InterlockedIncrementUL(&CurrentThread->UserTime); InterlockedIncrementUL(&CurrentThread->UserTime);
InterlockedIncrementUL(&CurrentProcess->UserTime); InterlockedIncrementUL(&CurrentProcess->UserTime);

View file

@ -207,9 +207,9 @@ KeUserModeCallback(IN ULONG RoutineIndex,
Thread->Tcb.TrapFrame, sizeof(KTRAP_FRAME) - (4 * sizeof(ULONG))); Thread->Tcb.TrapFrame, sizeof(KTRAP_FRAME) - (4 * sizeof(ULONG)));
NewFrame = (PKTRAP_FRAME)((char*)NewStack + StackSize - sizeof(KTRAP_FRAME) - sizeof(FX_SAVE_AREA)); NewFrame = (PKTRAP_FRAME)((char*)NewStack + StackSize - sizeof(KTRAP_FRAME) - sizeof(FX_SAVE_AREA));
/* We need the stack pointer to remain 4-byte aligned */ /* We need the stack pointer to remain 4-byte aligned */
NewFrame->Esp -= (((ArgumentLength + 3) & (~ 0x3)) + (4 * sizeof(ULONG))); NewFrame->HardwareEsp -= (((ArgumentLength + 3) & (~ 0x3)) + (4 * sizeof(ULONG)));
NewFrame->Eip = (ULONG)KeUserCallbackDispatcher; NewFrame->Eip = (ULONG)KeUserCallbackDispatcher;
UserEsp = (PULONG)NewFrame->Esp; UserEsp = (PULONG)NewFrame->HardwareEsp;
UserEsp[0] = 0; /* Return address. */ UserEsp[0] = 0; /* Return address. */
UserEsp[1] = RoutineIndex; UserEsp[1] = RoutineIndex;
UserEsp[2] = (ULONG)&UserEsp[4]; UserEsp[2] = (ULONG)&UserEsp[4];

View file

@ -544,7 +544,7 @@ MmDumpToPagingFile(ULONG BugCode,
Headers->Type = MmCoreDumpType; Headers->Type = MmCoreDumpType;
if (TrapFrame != NULL) if (TrapFrame != NULL)
{ {
if (!(TrapFrame->Eflags & (1 << 17))) if (!(TrapFrame->EFlags & (1 << 17)))
{ {
memcpy(&Headers->TrapFrame, TrapFrame, memcpy(&Headers->TrapFrame, TrapFrame,
sizeof(KTRAP_FRAME) - (4 * sizeof(DWORD))); sizeof(KTRAP_FRAME) - (4 * sizeof(DWORD)));

View file

@ -56,7 +56,7 @@ PspGetOrSetContextKernelRoutine(PKAPC Apc,
Event = &GetSetContext->Event; Event = &GetSetContext->Event;
Mode = GetSetContext->Mode; Mode = GetSetContext->Mode;
if (TrapFrame->Cs == KGDT_R0_CODE && Mode != KernelMode) if (TrapFrame->SegCs == KGDT_R0_CODE && Mode != KernelMode)
{ {
GetSetContext->Status = STATUS_ACCESS_DENIED; GetSetContext->Status = STATUS_ACCESS_DENIED;
} }