Index: traphdlr.c =================================================================== --- ntoskrnl/ke/i386/traphdlr.c (revision 74264) +++ ntoskrnl/ke/i386/traphdlr.c (working copy) @@ -220,7 +220,21 @@ IN ULONG Parameter3) { /* Check for VDM trap */ - ASSERT((KiVdmTrap(TrapFrame)) == FALSE); + if (KiVdmTrap(TrapFrame)) + { + const UCHAR *eip = (PVOID)((TrapFrame->SegCs << 4) + TrapFrame->Eip); + DPRINT1("Thread: %x\n", KeGetCurrentThread()); + DPRINT1("EFlags: %x\n", TrapFrame->EFlags); + DPRINT1("SegCs: %x\n", TrapFrame->SegCs); + DPRINT1("Eip: %x\n", TrapFrame->Eip); + DPRINT1("ErrCode: %x\n", TrapFrame->ErrCode); + DPRINT1("VdmObjects: %p\n", PsGetCurrentProcess()->VdmObjects); + DPRINT1("Eip bytes: %02x %02x %02x %02x\n", eip[-4], eip[-3], eip[-2], eip[-1]); + DPRINT1("Eip bytes: %02x %02x %02x %02x\n", eip[0], eip[1], eip[2], eip[3]); + DPRINT1("Eip bytes: %02x %02x %02x %02x\n", eip[4], eip[5], eip[6], eip[7]); + DPRINT1("Eip bytes: %02x %02x %02x %02x\n", eip[8], eip[9], eip[10], eip[11]); + ASSERT((KiVdmTrap(TrapFrame)) == FALSE); + } /* Enable interrupts if the trap came from user-mode */ if (KiUserTrap(TrapFrame)) _enable(); Index: v86vdm.c =================================================================== --- ntoskrnl/ke/i386/v86vdm.c (revision 74264) +++ ntoskrnl/ke/i386/v86vdm.c (working copy) @@ -621,6 +621,8 @@ PVDM_PROCESS_OBJECTS VdmProcessObjects; USHORT OldOffset, OldBase; + DPRINT1("Ke386CallBios (thread %p) for int 0x%lx, Eax=%lx, Ebx=%lx, Ecx=%lx, Edx=%lx, Ebp=%lx, Edi=%lx, Esi=%lx, Ds=%x, Es=%x\n", + Thread, Int, Context->Eax, Context->Ebx, Context->Ecx, Context->Edx, Context->Ebp, Context->Edi, Context->Esi, Context->SegDs, Context->SegEs); /* Start with a clean TEB */ RtlZeroMemory(VdmTeb, sizeof(TEB));