Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

309 lines
8.9 KiB

/*++
Copyright (c) 2001 Microsoft Corporation
Abstract:
Standard log macros. Support standard
setupact.log, setuperr.log and debug.log logs.
Author:
Souren Aghajanyan (sourenag) 24-Sep-2001
Revision History:
<alias> <date> <comments>
--*/
#pragma once
#include "log.h"
#undef INITIALIZE_LOG_CODE
#ifndef DEBUG
#define INITIALIZE_LOG_CODE if(!LogStandardInit(NULL, NULL, TRUE, FALSE, FALSE, FALSE, FALSE)){__leave;}
#else
#define INITIALIZE_LOG_CODE \
{\
WCHAR winDirectory[MAX_PATH];\
GetWindowsDirectoryW(winDirectory, sizeof(winDirectory) / sizeof(winDirectory[0]));\
lstrcatW (winDirectory, L"\\spsetup.log");\
if(!LogStandardInit(winDirectory, NULL, TRUE, FALSE, FALSE, FALSE, FALSE)){__leave;}\
}
#endif
#undef TERMINATE_LOG_CODE
#define TERMINATE_LOG_CODE LogDestroyStandard();
#if defined(__cplusplus)
extern "C" {
#endif
#if _MSC_VER < 1300
#define __FUNCTION__ "AvailableOnlyInVersion13"
#endif
#define STD_CALL_TYPE __stdcall
#if defined(DEBUG)
#ifdef _X86_
#define BreakPoint() __asm {int 3};
#else
#define BreakPoint() DebugBreak()
#endif
#else
#define BreakPoint()
#endif
#define MAX_MESSAGE_CHAR (1<<11)
typedef union tagLOG_MESSAGE{
CHAR pAStr[MAX_MESSAGE_CHAR];
WCHAR pWStr[MAX_MESSAGE_CHAR];
}LOG_MESSAGE, *PLOG_MESSAGE;
typedef struct tagLOG_PARTIAL_MSG{
DWORD Severity;
LOG_MESSAGE Message;
}LOG_PARTIAL_MSG, *PLOG_PARTIAL_MSG;
ILogManager *
STD_CALL_TYPE
LogStandardInit(
IN PCWSTR pDebugLogFileName,
IN HINSTANCE hModuleInstance, OPTIONAL
IN BOOL bCreateNew, OPTIONAL
IN BOOL bExcludeSetupActLog, OPTIONAL
IN BOOL bExcludeSetupErrLog, OPTIONAL
IN BOOL bExcludeXMLLog, OPTIONAL
IN BOOL bExcludeDebugFilter OPTIONAL
);
VOID
STD_CALL_TYPE
LogDestroyStandard(
VOID
);
PLOG_PARTIAL_MSG
STD_CALL_TYPE
ConstructPartialMsgVW(
IN DWORD dwSeverity,
IN PCSTR Format,
IN va_list args
);
PLOG_PARTIAL_MSG
STD_CALL_TYPE
ConstructPartialMsgVA(
IN DWORD dwSeverity,
IN PCSTR Format,
IN va_list args
);
LOGRESULT
STD_CALL_TYPE
LogMessageA(
IN PLOG_PARTIAL_MSG pPartialMsg,
IN PCSTR Condition,
IN DWORD SourceLineNumber,
IN PCSTR SourceFile,
IN PCSTR SourceFunction
);
LOGRESULT
STD_CALL_TYPE
LogMessageW(
IN PLOG_PARTIAL_MSG pPartialMsg,
IN PCSTR Condition,
IN DWORD SourceLineNumber,
IN PCWSTR SourceFile,
IN PCWSTR SourceFunction
);
PLOG_PARTIAL_MSG
STD_CALL_TYPE
ConstructPartialMsgIfA(
IN BOOL bCondition,
IN DWORD dwSeverity,
IN PCSTR Format,
...
);
PLOG_PARTIAL_MSG
STD_CALL_TYPE
ConstructPartialMsgIfW(
IN BOOL bCondition,
IN DWORD dwSeverity,
IN PCSTR Format,
...
);
#ifdef DEBUG
VOID
_cdecl
DebugLogTimeA (
IN PCSTR Format,
...
);
VOID
_cdecl
DebugLogTimeW (
IN PCWSTR Format,
...
);
#endif
#if defined(__cplusplus)
}
#endif
__inline BOOL IsConditionTrue(BOOL bCondition, ...){
return bCondition;
}
__inline
PLOG_PARTIAL_MSG
STD_CALL_TYPE
ConstructPartialMsgA(
IN DWORD dwSeverity,
IN PCSTR Format,
...
){
va_list args;
va_start(args, Format);
return ConstructPartialMsgVA(dwSeverity, Format, args);
}
__inline
PLOG_PARTIAL_MSG
STD_CALL_TYPE
ConstructPartialMsgW(
IN DWORD dwSeverity,
IN PCSTR Format,
...
){
va_list args;
va_start(args, Format);
return ConstructPartialMsgVW(dwSeverity, Format, args);
}
#ifdef UNICODE
#define ConstructPartialMsgIf ConstructPartialMsgIfW
#define ConstructPartialMsg ConstructPartialMsgW
#define LogMessage LogMessageW
#define DebugLogTime DebugLogTimeW
#else
#define ConstructPartialMsgIf ConstructPartialMsgIfA
#define ConstructPartialMsg ConstructPartialMsgA
#define LogMessage LogMessageA
#define DebugLogTime DebugLogTimeA
#endif
#define LOGMSGA(condition, message) LogMessageA(ConstructPartialMsgA message, condition, __LINE__, TEXT(__FILE__), TEXT(__FUNCTION__));
#define LOGMSGW(condition, message) LogMessageW(ConstructPartialMsgW message, condition, __LINE__, TEXT(__FILE__), TEXT(__FUNCTION__));
#define LOGMSGIFA(message) LogMessageA(ConstructPartialMsgIfA message, NULL, __LINE__, TEXT(__FILE__), TEXT(__FUNCTION__));
#define LOGMSGIFW(message) LogMessageW(ConstructPartialMsgIfW message, NULL, __LINE__, TEXT(__FILE__), TEXT(__FUNCTION__));
#define LOGA(message) LOGMSGA(NULL, message);
#define LOGW(message) LOGMSGW(NULL, message);
#define LOG_IFA(if_message) if(IsConditionTrue if_message){LOGMSGIFA(if_message);}
#define LOG_IFW(if_message) if(IsConditionTrue if_message){LOGMSGIFW(if_message);}
#define ELSE_LOGA(message) else{LOGA(message);}
#define ELSE_LOGW(message) else{LOGW(message);}
#define ELSE_LOG_IFA(if_message) else LOG_IFA(if_message);
#define ELSE_LOG_IFW(if_message) else LOG_IFW(if_message);
#ifdef UNICODE
#define LOGMSG LOGMSGW
#define LOGMSGIF LOGMSGIFW
#define LOG LOGW
#define LOG_IF LOG_IFW
#define ELSE_LOG ELSE_LOGW
#define ELSE_LOG_IF ELSE_LOG_IFW
#else
#define LOGMSG LOGMSGA
#define LOGMSGIF LOGMSGIFA
#define LOG LOGA
#define LOG_IF LOG_IFA
#define ELSE_LOG ELSE_LOGA
#define ELSE_LOG_IF ELSE_LOG_IFA
#endif
#if defined(DEBUG)
#define DBGMSGA(condition, message) if(logBreakPoint == LogMessageA(ConstructPartialMsgA message, condition, __LINE__, TEXT(__FILE__), TEXT(__FUNCTION__))){BreakPoint();}
#define DBGMSGW(condition, message) if(logBreakPoint == LogMessageW(ConstructPartialMsgW message, condition, __LINE__, TEXT(__FILE__), TEXT(__FUNCTION__))){BreakPoint();}
#define DBGMSGIFA(message) LOGMSGIFA(message)
#define DBGMSGIFW(message) LOGMSGIFW(message)
#else
#define DBGMSGA(condition, message)
#define DBGMSGW(condition, message)
#define DBGMSGIFA(message)
#define DBGMSGIFW(message)
#endif
#define DEBUGMSGA(message) DBGMSGA(NULL, message);
#define DEBUGMSGW(message) DBGMSGW(NULL, message);
#define DEBUGMSG_IFA(if_message) if(IsConditionTrue if_message){DBGMSGIFA(if_message);}
#define DEBUGMSG_IFW(if_message) if(IsConditionTrue if_message){DBGMSGIFW(if_message);}
#define ELSE_DEBUGMSGA(message) else{DEBUGMSGA(message);}
#define ELSE_DEBUGMSGW(message) else{DEBUGMSGW(message);}
#define ELSE_DEBUGMSG_IFA(if_message) else DEBUGMSG_IF(if_message);
#define ELSE_DEBUGMSG_IFW(if_message) else DEBUGMSG_IF(if_message);
#define DEBUGLOGTIMEA(message) DebugLogTimeA(message)
#define DEBUGLOGTIMEW(message) DebugLogTimeW(message)
#ifdef UNICODE
#define DBGMSG DBGMSGW
#define DBGMSGIF DBGMSGIFW
#define DEBUGMSG DEBUGMSGW
#define DEBUGMSG_IF DEBUGMSG_IFW
#define ELSE_DEBUGMSG ELSE_DEBUGMSGW
#define ELSE_DEBUGMSG_IF ELSE_DEBUGMSG_IFW
#define DEBUGLOGTIME DEBUGLOGTIMEW
#else
#define DBGMSG DBGMSGA
#define DBGMSGIF DBGMSGIFA
#define DEBUGMSG DEBUGMSGA
#define DEBUGMSG_IF DEBUGMSG_IFA
#define ELSE_DEBUGMSG ELSE_DEBUGMSGA
#define ELSE_DEBUGMSG_IF ELSE_DEBUGMSG_IFA
#define DEBUGLOGTIME DEBUGLOGTIMEA
#endif
#if defined(DEBUG)
#define MYVERIFY(condition) if(!(condition)){DBGMSG(#condition, (DBG_ASSERT, #condition));}
#else
#define MYVERIFY(condition) if(!(condition)){LOGMSG(#condition, (LOG_ASSERT, #condition));}
#endif
#define MYASSERT(condition) if(!(condition)){DBGMSG(#condition, (DBG_ASSERT, #condition));}
#define MYASSERT_F(condition, message) if(!(condition)){DBGMSG(#condition, (DBG_ASSERT, message));}
#define DEBUGMSG0(severity, message) DEBUGMSG((severity, message))
#define DEBUGMSG1(severity, message, p1) DEBUGMSG((severity, message, p1))
#define DEBUGMSG2(severity, message, p1, p2) DEBUGMSG((severity, message, p1, p2))
#define DEBUGMSG3(severity, message, p1, p2, p3) DEBUGMSG((severity, message, p1, p2, p3))
#define DEBUGMSG4(severity, message, p1, p2, p3, p4) DEBUGMSG((severity, message, p1, p2, p3, p4))
#define LOG0(severity, message) LOG((severity, message))
#define LOG1(severity, message, p1) LOG((severity, message, p1))
#define LOG2(severity, message, p1, p2) LOG((severity, message, p1, p2))
#define LOG3(severity, message, p1, p2, p3) LOG((severity, message, p1, p2, p3))
#define LOG4(severity, message, p1, p2, p3, p4) LOG((severity, message, p1, p2, p3, p4))
#define USEMSGID(x) ((PCSTR)(SIZE_T)(x))