#ifndef _SETUPLOG_ #define _SETUPLOG_ #include #include // // File names for the 2 log files. // #define SETUPLOG_ACTION_FILENAME TEXT("setupact.log") #define SETUPLOG_ERROR_FILENAME TEXT("setuperr.log") // // String used to separate items in the log. // #define SETUPLOG_ITEM_TERMINATOR TEXT("\r\n***\r\n\r\n") // // Value to be used as a MessageString to indicate that the MessageId should // be used instead. // #define SETUPLOG_USE_MESSAGEID (PTSTR)(1) // // The LogSeverity type and its associated values are defined in setupapi.h. // The high order word of the LogSeverity is reserved for the following flags. // #define SETUPLOG_SINGLE_MESSAGE 0x00010000 typedef PVOID (*PSPLOG_OPENFILE_ROUTINE) ( IN LPCTSTR Filename, IN BOOL WipeLogFile ); typedef UINT (*PSPLOG_CLOSEFILE_ROUTINE) ( IN PVOID LogFile ); typedef PVOID (*PSPLOG_ALLOC_ROUTINE) ( IN DWORD Size ); typedef VOID (*PSPLOG_FREE_ROUTINE) ( IN CONST VOID *p ); typedef PTSTR (*PSPLOG_FORMAT_ROUTINE) ( IN LPCTSTR MessageString, IN UINT MessageId, IN va_list *ArgumentList ); typedef BOOL (*PSPLOG_WRITE_ROUTINE) ( IN PVOID LogFile, IN LPCTSTR Buffer ); typedef BOOL (*PSPLOG_ACQUIRELOCK_ROUTINE) ( IN PVOID Mutex ); typedef BOOL (*PSPLOG_RELEASELOCK_ROUTINE) ( IN PVOID Mutex ); typedef struct _SETUPLOG_CONTEXT { PSPLOG_OPENFILE_ROUTINE OpenFile; PSPLOG_CLOSEFILE_ROUTINE CloseFile; PSPLOG_ALLOC_ROUTINE AllocMem; PSPLOG_FREE_ROUTINE FreeMem; PSPLOG_FORMAT_ROUTINE Format; PSPLOG_WRITE_ROUTINE Write; PSPLOG_ACQUIRELOCK_ROUTINE Lock; PSPLOG_RELEASELOCK_ROUTINE Unlock; PVOID hActionLog; PVOID hErrorLog; PVOID Mutex; LogSeverity WorstError; LPCTSTR SeverityDescriptions[LogSevMaximum]; } SETUPLOG_CONTEXT, *PSETUPLOG_CONTEXT; // // API's for setuplog.lib // BOOL SetuplogInitializeEx( IN PSETUPLOG_CONTEXT SetuplogContext, IN BOOL WipeLogFile, IN LPCTSTR ActionFilename, IN LPCTSTR ErrorFilename, IN PVOID Reserved1, IN DWORD Reserved2 ); BOOL SetuplogInitialize( IN PSETUPLOG_CONTEXT SetuplogContext, IN BOOL WipeLogFile ); PTSTR SetuplogFormatMessageWithContextV( IN PSETUPLOG_CONTEXT MyContext, IN DWORD Flags, IN LPCTSTR MessageString, IN UINT MessageId, IN va_list *ArgumentList ); PTSTR SetuplogFormatMessageV( IN DWORD Flags, IN LPCTSTR MessageString, IN UINT MessageId, IN va_list *ArgumentList ); PTSTR SetuplogFormatMessage( IN DWORD Flags, IN LPCTSTR MessageString, IN UINT MessageId, ... ); BOOL SetuplogErrorV( IN LogSeverity Severity, IN LPCTSTR MessageString, IN UINT MessageId, OPTIONAL IN va_list *ArgumentList ); BOOL SetuplogError( IN LogSeverity Severity, IN LPCTSTR MessageString, IN UINT MessageId, OPTIONAL ... ); BOOL SetuplogTerminate( VOID ); #endif // _SETUPLOG_