/*++

Copyright (c) 2001 Microsoft Corporation

Module Name:

    diagrprt.h

Abstract:

    This file contains all defines for the RAS Diag Report.

Author:

    Jeff Sigman (JeffSi) September 13, 2001

Environment:

    User Mode

Revision History:

    JeffSi      09/13/01        Created

--*/

#ifndef _DIAGRPRT_H_
#define _DIAGRPRT_H_

#define ALL_USERS_PROF 0x00000001
#define CURRENT_USER   0x00000002
#define GET_FOR_CM     0x00000004
#define GET_FOR_RAS    0x00000008
#define GET_FOR_MSINFO 0x00000010

#define SHOW_LOGS      0x00000001
#define SHOW_INSTALL   0x00000002
#define SHOW_CONFIG    0x00000004
#define SHOW_ALL       0x0000ffff

#define TIMESIZE         8

#define TIMEDATESTR      80

#define MAX_MSG_LENGTH   5120

#define BUF_WRITE_SIZE   4096

#define TITLE_SIZE       128

#define RPRT_ITM         14
#define RPRT_ITM_VERBOSE 1
//
// Macro to determine the percentage complete
//
#define ADD_PERCENT_DONE(x) \
        ((DWORD)(100 / (x ? (RPRT_ITM + RPRT_ITM_VERBOSE) : RPRT_ITM)))

typedef
LPBYTE
(*RAS_PRINTFILE_FUNC_CB)(
    IN LPBYTE pBuff,
    IN DWORD dwSize,
    IN DWORD dwHours);

typedef struct _BUFFER_WRITE_FILE
{
    DWORD dwPosition;
    HANDLE hFile;
    LPBYTE lpBuff;

} BUFFER_WRITE_FILE;

typedef struct _REPORT_INFO
{
    BOOL fDisplay;
    BOOL fVerbose;
    DWORD dwHours;
    BUFFER_WRITE_FILE* pBuff;
    DiagGetReportCb pCallback;
    GET_REPORT_STRING_CB* pCbInfo;

} REPORT_INFO;

typedef struct _CMD_LINE_UTILS
{
    PWCHAR pwszCmdLine;
    PWCHAR pwszAnchor;

} CMD_LINE_UTILS;

//
// task list structure
//
typedef struct _TASK_LIST
{
    DWORD dwProcessId;
    HANDLE hwnd;
    LPTSTR lpszWinSta;
    LPTSTR lpszDesk;
    WCHAR szWindowTitle[TITLE_SIZE];

} TASK_LIST, *PTASK_LIST;

typedef struct _TASK_LIST_ENUM
{
    PTASK_LIST tlist;
    DWORD dwNumTasks;
    LPTSTR lpszWinSta;
    LPTSTR lpszDesk;
    BOOL bFirstLoop;

} TASK_LIST_ENUM, *PTASK_LIST_ENUM;

extern CONST WCHAR g_pwszLBracket;
extern CONST WCHAR g_pwszRBracket;
extern CONST WCHAR g_pwszBackSlash;
extern CONST WCHAR g_pwszNull;

extern CONST WCHAR g_pwszEmpty[];
extern CONST WCHAR g_pwszSpace[];
extern CONST WCHAR g_pwszLogSrchStr[];
extern CONST WCHAR g_pwszLogging[];
extern CONST WCHAR g_pwszDispNewLine[];

extern CONST WCHAR g_pwszNewLineHtml[];
extern CONST WCHAR g_pwszPreStart[];
extern CONST WCHAR g_pwszPreEnd[];
extern CONST WCHAR g_pwszAnNameStart[];
extern CONST WCHAR g_pwszAnNameMiddle[];
extern CONST WCHAR g_pwszAnNameEnd[];
extern CONST WCHAR g_pwszAnStart[];
extern CONST WCHAR g_pwszAnMiddle[];
extern CONST WCHAR g_pwszAnEnd[];
extern CONST WCHAR g_pwszLiStart[];
extern CONST WCHAR g_pwszLiEnd[];

extern CONST WCHAR g_pwszTableOfContents[];
extern CONST WCHAR g_pwszTraceCollectTracingLogs[];
extern CONST WCHAR g_pwszTraceCollectCmLogs[];
extern CONST WCHAR g_pwszTraceCollectModemLogs[];
extern CONST WCHAR g_pwszTraceCollectIpsecLogs[];
extern CONST WCHAR g_pwszPrintRasEventLogs[];
extern CONST WCHAR g_pwszPrintSecurityEventLogs[];
extern CONST WCHAR g_pwszPrintRasInfData[];
extern CONST WCHAR g_pwszHrValidateRas[];
extern CONST WCHAR g_pwszHrShowNetComponentsAll[];
extern CONST WCHAR g_pwszCheckRasRegistryKeys[];
extern CONST WCHAR g_pwszPrintRasEnumDevices[];
extern CONST WCHAR g_pwszPrintProcessInfo[];
extern CONST WCHAR g_pwszPrintConsoleUtils[];
extern CONST WCHAR g_pwszPrintWinMsdReport[];
extern CONST WCHAR g_pwszPrintAllRasPbks[];

VOID
WriteLinkBackToToc(
    IN BUFFER_WRITE_FILE* pBuff);

VOID
WriteHtmlSection(
    IN BUFFER_WRITE_FILE* pBuff,
    IN LPCWSTR pwszAnchor,
    IN DWORD dwMsgId);

VOID
WriteHeaderSep(
    IN BUFFER_WRITE_FILE* pBuff,
    IN LPCWSTR pwszTitle);

DWORD
BufferWriteFileStrW(
    IN BUFFER_WRITE_FILE* pBuff,
    IN LPCWSTR pwszString);

DWORD
PrintFile(
    IN REPORT_INFO* pInfo,
    IN LPCWSTR pwszFile,
    IN BOOL fWritePath,
    IN RAS_PRINTFILE_FUNC_CB pCallback);

PWCHAR
GetTracingDir();

BOOL
GetCMLoggingSearchPath(
    IN HANDLE hKey,
    IN LPCWSTR pwszName,
    IN LPCWSTR* ppwszLogPath,
    IN LPCWSTR* ppwszSeach);

PWCHAR
FormatMessageFromMod(
    IN HANDLE hModule,
    IN DWORD dwId);

VOID
FreeFormatMessageFromMod(
    IN LPCWSTR pwszMessage);

PWCHAR
LoadStringFromHinst(
    IN HINSTANCE hInst,
    IN DWORD dwId);

VOID
FreeStringFromHinst(
    IN LPCWSTR pwszMessage);

DWORD
CopyAndCallCB(
    IN REPORT_INFO* pInfo,
    IN DWORD dwId);

PWCHAR
CreateErrorString(
    IN WORD wNumStrs,
    IN LPCWSTR pswzStrings,
    IN LPCWSTR pswzErrorMsg);

VOID
WriteEventLogEntry(
    IN BUFFER_WRITE_FILE* pBuff,
    IN PEVENTLOGRECORD pevlr,
    IN LPCWSTR pwszDescr,
    IN LPCWSTR pwszCategory);

DWORD
BufferWriteMessage(
    IN BUFFER_WRITE_FILE* pBuff,
    IN HANDLE hModule,
    IN DWORD dwMsgId,
    ...);

DWORD
WriteNewLine(
    IN BUFFER_WRITE_FILE* pBuff);

DWORD
BufferWriteFileCharW(
    IN BUFFER_WRITE_FILE* pBuff,
    IN CONST WCHAR wszChar);

DWORD
DiagGetReport(
    IN DWORD dwFlags,
    IN OUT LPCWSTR pwszString,
    IN OPTIONAL DiagGetReportCb pCallback,
    IN OPTIONAL PVOID pContext);

VOID
PrintTableOfContents(
    IN REPORT_INFO* pInfo,
    IN DWORD dwFlag);

DWORD
RasDiagShowAll(
    IN REPORT_INFO* pInfo);

DWORD
RasDiagShowInstallation(
    IN REPORT_INFO* pInfo);

DWORD
RasDiagShowConfiguration(
    IN REPORT_INFO* pInfo);

DWORD
CopyTempFileName(
    OUT LPCWSTR pwszTempFileName);

PWCHAR
CreateHtmFileName(
    IN LPCWSTR pwszFile);

DWORD
CreateReportFile(
    IN BUFFER_WRITE_FILE* pBuff,
    IN LPCWSTR pwszReport);

VOID
CloseReportFile(
    IN BUFFER_WRITE_FILE* pBuff);

VOID
PrintHtmlHeader(
    IN BUFFER_WRITE_FILE* pBuff);

VOID
PrintHtmlFooter(
    IN BUFFER_WRITE_FILE* pBuff);

PWCHAR
CabCompressFile(
    IN LPCWSTR pwszFile);

DWORD
MapiSendMail(
    IN LPCWSTR pwszEmailAdr,
    IN LPCWSTR pwszTempFile);

LPBYTE
ParseRasLogForTime(
    IN LPBYTE pBuff,
    IN DWORD dwSize,
    IN DWORD dwHours);

LPBYTE
ParseModemLogForTime(
    IN LPBYTE pBuff,
    IN DWORD dwSize,
    IN DWORD dwHours);

LPBYTE
ParseCmLogForTime(
    IN LPBYTE pBuff,
    IN DWORD dwSize,
    IN DWORD dwHours);

LPBYTE
ParseIpsecLogForTime(
    IN LPBYTE pBuff,
    IN DWORD dwSize,
    IN DWORD dwHours);

#endif // _DIAGRPRT_H_