Reactos
at master 136 lines 3.5 kB view raw
1/* 2 * PROJECT: ReactOS Run-Time Library 3 * LICENSE: BSD - See COPYING.ARM in the top level directory 4 * PURPOSE: Rtl Trace Routines 5 */ 6 7/* INCLUDES *******************************************************************/ 8 9#include <rtl.h> 10#define NDEBUG 11#include <debug.h> 12 13static RTL_UNLOAD_EVENT_TRACE RtlpUnloadEventTrace[RTL_UNLOAD_EVENT_TRACE_NUMBER]; 14static UINT RtlpUnloadEventTraceIndex = 0; 15 16/* FUNCTIONS ******************************************************************/ 17 18PRTL_UNLOAD_EVENT_TRACE 19NTAPI 20RtlGetUnloadEventTrace(VOID) 21{ 22 /* Just return a pointer to an array, according to MSDN */ 23 return RtlpUnloadEventTrace; 24} 25 26VOID 27NTAPI 28LdrpRecordUnloadEvent(_In_ PLDR_DATA_TABLE_ENTRY LdrEntry) 29{ 30 PIMAGE_NT_HEADERS NtHeaders; 31 UINT Sequence = RtlpUnloadEventTraceIndex++; 32 UINT Index = Sequence % RTL_UNLOAD_EVENT_TRACE_NUMBER; 33 USHORT StringLen; 34 35 DPRINT("LdrpRecordUnloadEvent(%wZ, %p - %p)\n", &LdrEntry->BaseDllName, LdrEntry->DllBase, 36 (ULONG_PTR)LdrEntry->DllBase + LdrEntry->SizeOfImage); 37 38 RtlpUnloadEventTrace[Index].BaseAddress = LdrEntry->DllBase; 39 RtlpUnloadEventTrace[Index].SizeOfImage = LdrEntry->SizeOfImage; 40 RtlpUnloadEventTrace[Index].Sequence = Sequence; 41 42 NtHeaders = RtlImageNtHeader(LdrEntry->DllBase); 43 44 if (NtHeaders) 45 { 46 RtlpUnloadEventTrace[Index].TimeDateStamp = NtHeaders->FileHeader.TimeDateStamp; 47 RtlpUnloadEventTrace[Index].CheckSum = NtHeaders->OptionalHeader.CheckSum; 48 } 49 else 50 { 51 RtlpUnloadEventTrace[Index].TimeDateStamp = 0; 52 RtlpUnloadEventTrace[Index].CheckSum = 0; 53 } 54 55 StringLen = min(LdrEntry->BaseDllName.Length / sizeof(WCHAR), RTL_NUMBER_OF(RtlpUnloadEventTrace[Index].ImageName)); 56 RtlCopyMemory(RtlpUnloadEventTrace[Index].ImageName, LdrEntry->BaseDllName.Buffer, StringLen * sizeof(WCHAR)); 57 if (StringLen < RTL_NUMBER_OF(RtlpUnloadEventTrace[Index].ImageName)) 58 RtlpUnloadEventTrace[Index].ImageName[StringLen] = 0; 59} 60 61BOOLEAN 62NTAPI 63RtlTraceDatabaseAdd(IN PRTL_TRACE_DATABASE Database, 64 IN ULONG Count, 65 IN PVOID *Trace, 66 OUT OPTIONAL PRTL_TRACE_BLOCK *TraceBlock) 67{ 68 UNIMPLEMENTED; 69 return FALSE; 70} 71 72PRTL_TRACE_DATABASE 73NTAPI 74RtlTraceDatabaseCreate(IN ULONG Buckets, 75 IN OPTIONAL SIZE_T MaximumSize, 76 IN ULONG Flags, 77 IN ULONG Tag, 78 IN OPTIONAL RTL_TRACE_HASH_FUNCTION HashFunction) 79{ 80 UNIMPLEMENTED; 81 return NULL; 82} 83 84BOOLEAN 85NTAPI 86RtlTraceDatabaseDestroy(IN PRTL_TRACE_DATABASE Database) 87{ 88 UNIMPLEMENTED; 89 return FALSE; 90} 91 92BOOLEAN 93NTAPI 94RtlTraceDatabaseEnumerate(IN PRTL_TRACE_DATABASE Database, 95 IN PRTL_TRACE_ENUMERATE TraceEnumerate, 96 IN OUT PRTL_TRACE_BLOCK *TraceBlock) 97{ 98 UNIMPLEMENTED; 99 return FALSE; 100} 101 102 103BOOLEAN 104NTAPI 105RtlTraceDatabaseFind(IN PRTL_TRACE_DATABASE Database, 106 IN ULONG Count, 107 IN PVOID *Trace, 108 OUT OPTIONAL PRTL_TRACE_BLOCK *TraceBlock) 109{ 110 UNIMPLEMENTED; 111 return FALSE; 112} 113 114BOOLEAN 115NTAPI 116RtlTraceDatabaseLock(IN PRTL_TRACE_DATABASE Database) 117{ 118 UNIMPLEMENTED; 119 return FALSE; 120} 121 122BOOLEAN 123NTAPI 124RtlTraceDatabaseUnlock(IN PRTL_TRACE_DATABASE Database) 125{ 126 UNIMPLEMENTED; 127 return FALSE; 128} 129 130BOOLEAN 131NTAPI 132RtlTraceDatabaseValidate(IN PRTL_TRACE_DATABASE Database) 133{ 134 UNIMPLEMENTED; 135 return FALSE; 136}