|
|
#pragma once
/*
* Ole32 in-memory logging. * * Provides a per-process log of events. Only for debugging purposes. */ #ifdef DBG
/*
* All subject/verb definitions should go here. * * The assignment of symbols to verbs/subjects is completely arbitrary, and * doesn't mean a thing. Except nothing. It has to be NULL. */ #define SU_NOTHING '\0'
#define SU_GLOBAL 'G'
#define SU_APT 'A'
#define SU_STDID 'S'
#define VB_ADDREF '+'
#define VB_RELEASE '-'
#define VB_QI '?'
#define VB_CREATE 'C'
/*
* Only debuggers need understand this stuff. * * Code only has to call the Ole32Log function below. */ #define STACKTRACE_DEPTH (4)
struct DebugEvent { DWORD Time; DWORD ThreadID; unsigned char Subject; unsigned char Verb; void *SubjectPtr; void *ObjectPtr; ULONG_PTR UserData; void *Stack[STACKTRACE_DEPTH]; };
void __Ole32Log (unsigned char Subject, unsigned char Verb, void *SubjectPtr, void *ObjectPtr, ULONG_PTR UserData, BOOL fGrabStack, int FramesToSkip);
inline void Ole32Log (unsigned char Subject, unsigned char Verb, void *SubjectPtr, void *ObjectPtr = NULL, ULONG_PTR UserData = 0, BOOL fGrabStack = FALSE, int FramesToSkip = 0) { __Ole32Log(Subject, Verb, SubjectPtr, ObjectPtr, UserData, fGrabStack, FramesToSkip); } #else
inline void Ole32Log (unsigned char Subject, unsigned char Verb, void *SubjectPtr, void *ObjectPtr = NULL, ULONG_PTR UserData = 0, BOOL fGrabStack = FALSE, int FramesToSkip = 0) { //Don't do anything!
} #endif
|