/*++ Copyright (c) 1991 Microsoft Corporation Module Name: vdmtrace.c Abstract: This module contains the support maintaining the VDM trace log. Author: Neil Sandlin (neilsa) 15-Sep-1996 Revision History: --*/ #include "vdmp.h" VOID VdmTraceEvent( USHORT Type, USHORT wData, USHORT lData, PKTRAP_FRAME TrapFrame ); #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, VdmTraceEvent) #endif VOID VdmTraceEvent( USHORT Type, USHORT wData, USHORT lData, PKTRAP_FRAME TrapFrame ) /*++ Routine Description: Arguments: Return Value: None --*/ { #if 0 // This code represents a security problem. Since it is only used // on special occasions, it won't be built into the standard build. // Individuals wishing to use it can build themselves a kernel with // it in. PVDM_TIB VdmTib; NTSTATUS Status = STATUS_SUCCESS; KIRQL OldIrql; PVDM_TRACEENTRY pEntry; PVDM_TRACEINFO pInfo; LARGE_INTEGER CurTime, DiffTime; PAGED_CODE(); #if 0 // // Raise Irql to APC level... // KeRaiseIrql(APC_LEVEL, &OldIrql); // // VdmTib is in user mode memory // try { #endif if ((*FIXED_NTVDMSTATE_LINEAR) & VDM_TRACE_HISTORY)) { // // Get a pointer to the VdmTib // VdmTib = NtCurrentTeb()->Vdm; if (VdmTib->TraceInfo.pTraceTable) { pEntry = &VdmTib->TraceInfo.pTraceTable[VdmTib->TraceInfo.CurrentEntry]; pEntry->Type = Type; pEntry->wData = wData; pEntry->lData = lData; switch (VdmTib->TraceInfo.Flags & VDMTI_TIMER_MODE) { case VDMTI_TIMER_TICK: CurTime.LowPart = NtGetTickCount(); pEntry->Time = CurTime.LowPart - VdmTib->TraceInfo.TimeStamp.LowPart; VdmTib->TraceInfo.TimeStamp.LowPart = CurTime.LowPart; break; case VDMTI_TIMER_PERFCTR: pEntry->Time = 0; break; case VDMTI_TIMER_STAT: pEntry->Time = 0; break; } pEntry->eax = TrapFrame->Eax; pEntry->ebx = TrapFrame->Ebx; pEntry->ecx = TrapFrame->Ecx; pEntry->edx = TrapFrame->Edx; pEntry->esi = TrapFrame->Esi; pEntry->edi = TrapFrame->Edi; pEntry->ebp = TrapFrame->Ebp; pEntry->esp = TrapFrame->HardwareEsp; pEntry->eip = TrapFrame->Eip; pEntry->eflags = TrapFrame->EFlags; pEntry->cs = (USHORT) TrapFrame->SegCs; pEntry->ds = (USHORT) TrapFrame->SegDs; pEntry->es = (USHORT) TrapFrame->SegEs; pEntry->fs = (USHORT) TrapFrame->SegFs; pEntry->gs = (USHORT) TrapFrame->SegGs; pEntry->ss = (USHORT) TrapFrame->HardwareSegSs; if (++VdmTib->TraceInfo.CurrentEntry >= (VdmTib->TraceInfo.NumPages*4096/sizeof(VDM_TRACEENTRY))) { VdmTib->TraceInfo.CurrentEntry = 0; } } } #if 0 } except(EXCEPTION_EXECUTE_HANDLER) { Status = GetExceptionCode(); } KeLowerIrql(OldIrql); #endif #else UNREFERENCED_PARAMETER (Type); UNREFERENCED_PARAMETER (wData); UNREFERENCED_PARAMETER (lData); UNREFERENCED_PARAMETER (TrapFrame); #endif }