/**INC+**********************************************************************/
/* Header:    wtrcint.h                                                     */
/*                                                                          */
/* Purpose:   Interal tracing functions header - Windows specific           */
/*                                                                          */
/* Copyright(C) Microsoft Corporation 1997                                  */
/*                                                                          */
/****************************************************************************/
/** Changes:
 * $Log:   Y:/logs/h/dcl/wtrcint.h_v  $
 *
 *    Rev 1.8   29 Aug 1997 09:22:56   ENH
 * SFR1259: Changed SystemError
 *
 *    Rev 1.7   22 Aug 1997 15:11:18   SJ
 * SFR1291: Win16 Trace DLL doesn't write integers to ini file properly
 *
 *    Rev 1.6   10 Jul 1997 18:09:44   AK
 * SFR1016: Initial changes to support Unicode
 *
 *    Rev 1.5   10 Jul 1997 17:26:14   KH
 * SFR1022: Get 16-bit trace working
**/
/**INC-**********************************************************************/
#ifndef _H_WTRCINT
#define _H_WTRCINT

#ifdef VER_HOST
#include <wosiapi.h>
#endif /* VER_HOST */

/****************************************************************************/
/*                                                                          */
/* CONSTANTS                                                                */
/*                                                                          */
/****************************************************************************/
/****************************************************************************/
/* Notification constants.                                                  */
/****************************************************************************/
#define TRC_TRACE_DLL_INITIALIZE       0
#define TRC_TRACE_DLL_TERMINATE        1
#define TRC_PROCESS_ATTACH_NOTIFY      2
#define TRC_PROCESS_DETACH_NOTIFY      3
#define TRC_THREAD_ATTACH_NOTIFY       4
#define TRC_THREAD_DETACH_NOTIFY       5
#define TRC_SYMBOLS_LOADING_NOTIFY     6
#define TRC_SYMBOLS_LOADED_NOTIFY      7
#define TRC_SYMBOLS_UNLOAD_NOTIFY      8
#define TRC_FILES_RESET                9

/****************************************************************************/
/* Trace internal error return values.                                      */
/****************************************************************************/
#define TRC_RC(N)                      ((DCUINT16)N + TRC_BASE_RC)

#define TRC_RC_CREATE_MAPPING_FAILED   TRC_RC(  1)
#define TRC_RC_MAP_VIEW_FAILED         TRC_RC(  2)
#define TRC_RC_CREATE_FILE_FAILED      TRC_RC(  3)
#define TRC_RC_IO_ERROR                TRC_RC(  4)
#define TRC_RC_CREATE_MUTEX_FAILED     TRC_RC(  5)
#define TRC_RC_SYMBOL_LOAD_FAILED      TRC_RC(  6)
#define TRC_RC_SYMBOL_UNLOAD_FAILED    TRC_RC(  7)
#define TRC_RC_SET_SEC_INFO_FAILED     TRC_RC(  8)

/****************************************************************************/
/* Assert box text                                                          */
/****************************************************************************/
#define TRC_ASSERT_TEXT   _T("%s\n\nFunction %s in file %s at line %d.\n")

#define TRC_ASSERT_TEXT2  _T("\n(Press Retry to debug the application)")

/****************************************************************************/
/* Registry buffer constants.                                               */
/****************************************************************************/
#define TRC_MAX_SUBKEY                 256

/****************************************************************************/
/* Internal trace status flags.  These are maintained on a per process      */
/* basis and are stored in the <trcProcessStatus> field.                    */
/*                                                                          */
/* TRC_STATUS_SYMBOLS_LOADED           : are the debug symbols loaded.      */
/****************************************************************************/
#define TRC_STATUS_SYMBOLS_LOADED      DCFLAG32(1)

/****************************************************************************/
/* Carriage return and line feed pair.                                      */
/****************************************************************************/
#define TRC_CRLF                       _T("\r\n")

/****************************************************************************/
/* Trace format definitions.  These are used for printing various parts of  */
/* the trace lines.                                                         */
/*                                                                          */
/* MODL     is the module name.                                             */
/* STCK     is the stack format (offset, bp, parm1-4).                      */
/*                                                                          */
/****************************************************************************/
#define TRC_MODL_FMT                  _T("%8.8s")
#define TRC_STCK_FMT                  _T("%08x %08x %08x %08x %08x %08x %08x")

#ifdef VER_HOST
/****************************************************************************/
/* Specific values for trace escape codes                                   */
/****************************************************************************/
#define TRC_ESC(code)           (OSI_TRC_ESC_FIRST + code)

#define TRC_ESC_SET_TRACE       TRC_ESC(0)  /* Set new trace level & filter */

#define TRC_ESC_GET_TRACE       TRC_ESC(1)  /* Get latest kernel trace data */

#endif /* VER_HOST */

/****************************************************************************/
/*                                                                          */
/* TYPEDEFS                                                                 */
/*                                                                          */
/****************************************************************************/
/****************************************************************************/
/* TRC_SHARED_DATA                                                          */
/* ===============                                                          */
/* The pointer to the start of the shared data memory mapped file is cast   */
/* as a PTRC_SHARED_DATA.                                                   */
/*                                                                          */
/*                                                                          */
/* trcConfig          - a trace configuration structure which contains the  */
/*                      trace level, prefix list etc.                       */
/* trcIndicator       - which trace MMF is in use.                          */
/* trcOffset          - the current offset from the start of the trace      */
/*                      file.                                               */
/* trcpOutputBuffer   - the trace output buffer.                            */
/* trcpModuleFileName - the module file name of the trace DLL.              */
/* trcpStorageBuffer  - the kernel mode trace output buffer.                */
/*                                                                          */
/****************************************************************************/
typedef struct tagTRC_SHARED_DATA
{
    TRC_CONFIG     trcConfig;
    TRC_FILTER     trcFilter;
    DCUINT         trcIndicator;
    DCUINT32       trcOffset;
    DCTCHAR        trcpOutputBuffer[TRC_LINE_BUFFER_SIZE];
    DCTCHAR        trcpModuleFileName[TRC_FILE_NAME_SIZE];
    DCTCHAR        trcpStorageBuffer[TRC_KRNL_BUFFER_SIZE];
} TRC_SHARED_DATA;

typedef TRC_SHARED_DATA  DCPTR PTRC_SHARED_DATA;

#ifdef VER_HOST
/**STRUCT+*******************************************************************/
/* STRUCTURE: TRC_CHANGE_CONFIG                                             */
/*                                                                          */
/* DESCRIPTION:                                                             */
/*                                                                          */
/* This structure is used to pass the new trace settings to the OSI task.   */
/****************************************************************************/
typedef struct tagTRC_CHANGE_CONFIG
{
    OSI_ESCAPE_HEADER header;           /* Common escape header             */

    TRC_CONFIG        config;           /* New tracing configuration        */

    TRC_FILTER        filter;           /* New filter configuration         */

} TRC_CHANGE_CONFIG, DCPTR PTRC_CHANGE_CONFIG;
/**STRUCT-*******************************************************************/


/**STRUCT+*******************************************************************/
/* STRUCTURE: TRC_GET_OUTPUT                                                */
/*                                                                          */
/* DESCRIPTION:                                                             */
/*                                                                          */
/* This structure is used to pass the latest kernel mode tracing to user    */
/* space.                                                                   */
/****************************************************************************/
typedef struct tagTRC_GET_OUTPUT
{
    OSI_ESCAPE_HEADER header;           /* Common escape header             */

    PDCTCHAR          buffer;           /* Latest buffer of trace output    */

    DCUINT32          length;           /* Length of data in the buffer     */

    DCUINT32          linesLost;        /* Lines lost from kernel trace     */

} TRC_GET_OUTPUT, DCPTR PTRC_GET_OUTPUT;
/**STRUCT-*******************************************************************/
#endif /* VER_HOST */

/****************************************************************************/
/*                                                                          */
/* FUNCTIONS                                                                */
/*                                                                          */
/****************************************************************************/
/****************************************************************************/
/*                                                                          */
/* TRCBlankFile                                                             */
/* TRCCloseAllFiles                                                         */
/* TRCCloseSharedData                                                       */
/* TRCCloseSingleFile                                                       */
/* TRCDetermineIndicator                                                    */
/* TRCDetermineOffset                                                       */
/* TRCDisplayAssertBox                                                      */
/* TRCGetCurrentDate                                                        */
/* TRCGetCurrentTime                                                        */
/* TRCGetFileTime                                                           */
/* TRCSystemError                                                           */
/* TRCOpenAllFiles                                                          */
/* TRCOpenSharedData                                                        */
/* TRCOpenSingleFile                                                        */
/* TRCOutputToFile                                                          */
/* TRCReadEntry                                                             */
/* TRCReadProfInt                                                           */
/* TRCReadProfString                                                        */
/* TRCStackTrace                                                            */
/* TRCSymbolsLoad                                                           */
/* TRCSymbolsUnload                                                         */
/* TRCWriteEntry                                                            */
/* TRCWriteProfInt                                                          */
/* TRCWriteProfString                                                       */
/*                                                                          */
/****************************************************************************/
DCVOID DCINTERNAL TRCMaybeSwapFile(DCUINT length);

DCVOID DCINTERNAL TRCExitProcess(DCUINT32 exitCode);

DCVOID DCINTERNAL TRCBlankFile(DCUINT fileNumber);

DCVOID DCINTERNAL TRCCloseAllFiles(DCVOID);

DCVOID DCINTERNAL TRCCloseSharedData(DCVOID);

DCVOID DCINTERNAL TRCCloseSingleFile(DCUINT fileNumber, DCUINT seconds);

DCVOID DCINTERNAL TRCDetermineIndicator(DCVOID);

DCUINT32 DCINTERNAL TRCDetermineOffset(DCUINT32 fileNum);

DCVOID DCINTERNAL TRCDisplayAssertBox(PDCTCHAR pText);

DCVOID DCINTERNAL TRCGetCurrentDate(PDC_DATE pDate);

DCVOID DCINTERNAL TRCGetCurrentTime(PDC_TIME pTime);

DCVOID DCINTERNAL TRCGetKernelTrace(DCVOID);

#ifndef DLL_DISP
DCBOOL DCINTERNAL TRCGetFileTime(DCUINT      fileNumber,
                                 PDCFILETIME pFileTime);

DCUINT DCINTERNAL TRCReadEntry(HKEY     topLevelKey,
                               PDCTCHAR pEntry,
                               PDCVOID  pBuffer,
                               DCINT    bufferSize,
                               DCINT32  expectedDataType);

DCUINT DCINTERNAL TRCWriteEntry(HKEY     topLevelKey,
                                PDCTCHAR pEntry,
                                PDCTCHAR pData,
                                DCINT    dataSize,
                                DCINT32  dataType);

#endif

DCVOID DCINTERNAL TRCSystemError(DCUINT   traceComponent,
                                 DCUINT   lineNumber,
                                 PDCTCHAR funcName,
                                 PDCTCHAR fileName,
                                 PDCTCHAR string);

DCUINT DCINTERNAL TRCOpenAllFiles(DCVOID);

DCUINT DCINTERNAL TRCOpenSharedData(DCVOID);

DCUINT DCINTERNAL TRCOpenSingleFile(DCUINT fileNumber);

DCVOID DCINTERNAL TRCOutputToFile(PDCTCHAR pText,
                                  DCUINT   length,
                                  DCUINT   traceLevel);

DCVOID DCINTERNAL TRCOutputToUser(PDCTCHAR pText,
                                  DCUINT32 length,
                                  DCUINT32 traceLevel);

DCUINT DCINTERNAL TRCReadProfInt(PDCTCHAR pEntry,
                                 PDCUINT32   pValue);

DCUINT DCINTERNAL TRCReadProfString(PDCTCHAR pEntry,
                                    PDCTCHAR pBuffer,
                                    DCINT16  bufferSize);

DCVOID DCINTERNAL TRCStackTrace(DCUINT traceLevel);

DCUINT DCINTERNAL TRCSymbolsLoad(DCVOID);

DCUINT DCINTERNAL TRCSymbolsUnload(DCVOID);

DCUINT DCINTERNAL TRCWriteProfInt(PDCTCHAR  pEntry,
                                  PDCUINT32 pValue);

DCUINT DCINTERNAL TRCWriteProfString(PDCTCHAR pEntry,
                                     PDCTCHAR pBuffer);

DCUINT DCINTERNAL TRCGetModuleFileName(PDCTCHAR pModuleName,
                                       UINT cchModuleName);

/****************************************************************************/
/* Get the platform specific definitions                                    */
/****************************************************************************/
#ifdef OS_WIN16
#include <dtrcint.h>
#else
#include <ntrcint.h>
#endif

#endif /* _H_WTRCINT */