1
0
mirror of https://github.com/SoftEtherVPN/SoftEtherVPN.git synced 2024-11-23 01:49:53 +03:00
SoftEtherVPN/src/Mayaqua/Tracking.h
2021-04-05 04:48:25 +02:00

90 lines
2.2 KiB
C

// SoftEther VPN Source Code - Developer Edition Master Branch
// Mayaqua Kernel
// Tracking.h
// Header of Tracking.c
#ifndef TRACKING_H
#define TRACKING_H
#include "MayaType.h"
// The number of array
#define TRACKING_NUM_ARRAY 1048576
// Hash from an pointer to an array index
#define TRACKING_HASH(p) (UINT)(((((UINT64)(p)) / (UINT64)(sizeof(void *))) % ((UINT64)TRACKING_NUM_ARRAY)))
// Call stack
struct CALLSTACK_DATA
{
bool symbol_cache;
UINT64 offset, disp;
char *name;
struct CALLSTACK_DATA *next;
char filename[MAX_PATH];
UINT line;
};
// Object
struct TRACKING_OBJECT
{
UINT Id;
char *Name;
UINT64 Address;
UINT Size;
UINT64 CreatedDate;
CALLSTACK_DATA *CallStack;
char FileName[MAX_PATH];
UINT LineNumber;
};
// Usage of the memory
struct MEMORY_STATUS
{
UINT MemoryBlocksNum;
UINT MemorySize;
};
// Tracking list
struct TRACKING_LIST
{
struct TRACKING_LIST *Next;
struct TRACKING_OBJECT *Object;
};
CALLSTACK_DATA *GetCallStack();
bool GetCallStackSymbolInfo(CALLSTACK_DATA *s);
void FreeCallStack(CALLSTACK_DATA *s);
CALLSTACK_DATA *WalkDownCallStack(CALLSTACK_DATA *s, UINT num);
void GetCallStackStr(char *str, UINT size, CALLSTACK_DATA *s);
void PrintCallStack(CALLSTACK_DATA *s);
void InitTracking();
void FreeTracking();
int CompareTrackingObject(const void *p1, const void *p2);
void LockTrackingList();
void UnlockTrackingList();
void InsertTrackingList(TRACKING_OBJECT *o);
void DeleteTrackingList(TRACKING_OBJECT *o, bool free_object_memory);
TRACKING_OBJECT *SearchTrackingList(UINT64 Address);
void TrackNewObj(UINT64 addr, char *name, UINT size);
void TrackGetObjSymbolInfo(TRACKING_OBJECT *o);
void TrackDeleteObj(UINT64 addr);
void TrackChangeObjSize(UINT64 addr, UINT size, UINT64 new_addr);
void GetMemoryStatus(MEMORY_STATUS *status);
void PrintMemoryStatus();
void MemoryDebugMenu();
int SortObjectView(void *p1, void *p2);
void DebugPrintAllObjects();
void DebugPrintCommandList();
void PrintObjectList(TRACKING_OBJECT *o);
void PrintObjectInfo(TRACKING_OBJECT *o);
void DebugPrintObjectInfo(UINT id);
bool IsTrackingEnabled();
#endif // TRACKING_H