- It should now be safe to remove the V86 ESP0 hack, since V86 mode works fine (tested on VMWare/QEmu).

svn path=/trunk/; revision=23809
This commit is contained in:
Alex Ionescu 2006-08-30 19:29:16 +00:00
parent 21aef1a7a7
commit 3d10f77c92
4 changed files with 10 additions and 29 deletions

View file

@ -49,6 +49,13 @@ typedef struct _DISPATCH_INFO
PKINTERRUPT_ROUTINE *FlatDispatch; PKINTERRUPT_ROUTINE *FlatDispatch;
} DISPATCH_INFO, *PDISPATCH_INFO; } DISPATCH_INFO, *PDISPATCH_INFO;
typedef PCHAR
(NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)(
IN PUNICODE_STRING Unicode,
IN PCHAR Ansi,
IN ULONG Length
);
struct _KIRQ_TRAPFRAME; struct _KIRQ_TRAPFRAME;
struct _KPCR; struct _KPCR;
struct _KPRCB; struct _KPRCB;
@ -76,6 +83,7 @@ extern ULONG KeI386EFlagsAndMaskV86;
extern ULONG KeI386EFlagsOrMaskV86; extern ULONG KeI386EFlagsOrMaskV86;
extern BOOLEAN KeI386VirtualIntExtensions; extern BOOLEAN KeI386VirtualIntExtensions;
extern KIDTENTRY KiIdt[]; extern KIDTENTRY KiIdt[];
extern FAST_MUTEX KernelAddressSpaceLock;
/* MACROS *************************************************************************/ /* MACROS *************************************************************************/

View file

@ -24,12 +24,10 @@ HalReleaseDisplayOwnership(
VOID VOID
); );
extern FAST_MUTEX KernelAddressSpaceLock;
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
LIST_ENTRY BugcheckCallbackListHead = {NULL,NULL}; LIST_ENTRY BugcheckCallbackListHead;
LIST_ENTRY BugcheckReasonCallbackListHead = {NULL,NULL}; LIST_ENTRY BugcheckReasonCallbackListHead;
ULONG KeBugCheckActive, KeBugCheckOwner; ULONG KeBugCheckActive, KeBugCheckOwner;
LONG KeBugCheckOwnerRecursionCount; LONG KeBugCheckOwnerRecursionCount;
PRTL_MESSAGE_RESOURCE_DATA KiBugCodeMessages; PRTL_MESSAGE_RESOURCE_DATA KiBugCodeMessages;
@ -38,13 +36,6 @@ ULONG KiHardwareTrigger;
PUNICODE_STRING KiBugCheckDriver; PUNICODE_STRING KiBugCheckDriver;
ULONG_PTR KiBugCheckData[5]; ULONG_PTR KiBugCheckData[5];
typedef PCHAR
(NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)(
IN PUNICODE_STRING Unicode,
IN PCHAR Ansi,
IN ULONG Length
);
/* PRIVATE FUNCTIONS *********************************************************/ /* PRIVATE FUNCTIONS *********************************************************/
BOOLEAN BOOLEAN

View file

@ -299,11 +299,6 @@ BadThread:
/* Save the Exception list */ /* Save the Exception list */
push [ebx+KPCR_EXCEPTION_LIST] push [ebx+KPCR_EXCEPTION_LIST]
#if WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK // V86 HACK
mov ecx, [ebx+KPCR_TSS]
push [ecx+KTSS_ESP0]
#endif
/* DPC shouldn't be active */ /* DPC shouldn't be active */
cmp byte ptr [ebx+KPCR_PRCB_DPC_ROUTINE_ACTIVE], 0 cmp byte ptr [ebx+KPCR_PRCB_DPC_ROUTINE_ACTIVE], 0
jnz BugCheckDpc jnz BugCheckDpc
@ -398,11 +393,6 @@ SameProcess:
inc dword ptr [esi+KTHREAD_CONTEXT_SWITCHES] inc dword ptr [esi+KTHREAD_CONTEXT_SWITCHES]
//inc dword ptr [esi+KPRC_PRCB_CONTEXT_SWITCHES] //inc dword ptr [esi+KPRC_PRCB_CONTEXT_SWITCHES]
#if WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK
mov ebp, [ebx+KPCR_TSS]
pop [ebp+KTSS_ESP0]
#endif
/* Restore exception list */ /* Restore exception list */
pop [ebx+KPCR_EXCEPTION_LIST] pop [ebx+KPCR_EXCEPTION_LIST]

View file

@ -14,9 +14,6 @@
typedef struct _KSHARED_CTXSWITCH_FRAME typedef struct _KSHARED_CTXSWITCH_FRAME
{ {
#if WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK // V86 HACK
ULONG_PTR Esp0;
#endif
PVOID ExceptionList; PVOID ExceptionList;
KIRQL WaitIrql; KIRQL WaitIrql;
PVOID RetEip; PVOID RetEip;
@ -236,11 +233,6 @@ Ke386InitThreadWithContext(PKTHREAD Thread,
CtxSwitchFrame->RetEip = KiThreadStartup; CtxSwitchFrame->RetEip = KiThreadStartup;
CtxSwitchFrame->WaitIrql = APC_LEVEL; CtxSwitchFrame->WaitIrql = APC_LEVEL;
CtxSwitchFrame->ExceptionList = (PVOID)0xFFFFFFFF; CtxSwitchFrame->ExceptionList = (PVOID)0xFFFFFFFF;
#if WE_DO_NOT_SPEAK_ABOUT_THE_V86_HACK // V86 HACK
CtxSwitchFrame->Esp0 = (ULONG_PTR)Thread->InitialStack -
sizeof(FX_SAVE_AREA) -
0x10;
#endif
/* Save back the new value of the kernel stack. */ /* Save back the new value of the kernel stack. */
DPRINT("Final Kernel Stack: %x \n", CtxSwitchFrame); DPRINT("Final Kernel Stack: %x \n", CtxSwitchFrame);