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.
 
 
 
 
 
 

242 lines
7.8 KiB

//////////////////////////////////////////////////////////////////////////////
//
// File Name: fxocDbg.cpp
//
// Abstract: This provides the debug routines used in the FaxOCM
// code base.
//
// Environment: Windows XP / User Mode
//
// Copyright (c) 2000 Microsoft Corporation
//
// Revision History:
//
// Date: Developer: Comments:
// ----- ---------- ---------
// 15-Mar-2000 Oren Rosenbloom (orenr) Created
//////////////////////////////////////////////////////////////////////////////
#include "faxocm.h"
#pragma hdrstop
#define prv_SECTION_FAXOCMDEBUG _T("FaxOcmDebug")
#define prv_KEY_DEBUGLEVEL _T("DebugLevel")
#define prv_KEY_DEBUGFORMAT _T("DebugFormat")
#define prv_DEBUG_FILE_NAME _T("%windir%\\FaxSetup.log")
///////////////////////////////
// prv_OC_Function
//
// Type containing text description
// of stage of OC Manager
// setup.
//
typedef struct prv_OC_Function
{
UINT uiFunction;
TCHAR *pszFunctionDesc;
} prv_OC_Function;
///////////////////////////////
// prv_OC_FunctionTable
//
// This table contains the various
// stages of the OC Manager setup,
// and their text equivalent. This
// allows us to output to debug the
// stage of setup, rather than the
// numerical equivalent.
//
//
static prv_OC_Function prv_OC_FunctionTable[] =
{
{OC_PREINITIALIZE, _T("OC_PREINITIALIZE")},
{OC_INIT_COMPONENT, _T("OC_INIT_COMPONENT")},
{OC_SET_LANGUAGE, _T("OC_SET_LANGUAGE")},
{OC_QUERY_IMAGE, _T("OC_QUERY_IMAGE")},
{OC_REQUEST_PAGES, _T("OC_REQUEST_PAGES")},
{OC_QUERY_CHANGE_SEL_STATE, _T("OC_QUERY_CHANGE_SEL_STATE")},
{OC_CALC_DISK_SPACE, _T("OC_CALC_DISK_SPACE")},
{OC_QUEUE_FILE_OPS, _T("OC_QUEUE_FILE_OPS")},
{OC_NOTIFICATION_FROM_QUEUE, _T("OC_NOTIFICATION_FROM_QUEUE")},
{OC_QUERY_STEP_COUNT, _T("OC_QUERY_STEP_COUNT")},
{OC_COMPLETE_INSTALLATION, _T("OC_COMPLETE_INSTALLATION")},
{OC_CLEANUP, _T("OC_CLEANUP")},
{OC_QUERY_STATE, _T("OC_QUERY_STATE")},
{OC_NEED_MEDIA, _T("OC_NEED_MEDIA")},
{OC_ABOUT_TO_COMMIT_QUEUE, _T("OC_ABOUT_TO_COMMIT_QUEUE")},
{OC_QUERY_SKIP_PAGE, _T("OC_QUERY_SKIP_PAGE")},
{OC_WIZARD_CREATED, _T("OC_WIZARD_CREATED")},
{OC_FILE_BUSY, _T("OC_FILE_BUSY")},
{OC_EXTRA_ROUTINES, _T("OC_EXTRA_ROUTINES")}
};
#define NUM_OC_FUNCTIONS (sizeof(prv_OC_FunctionTable) / sizeof(prv_OC_FunctionTable[0]))
////////////////////////////////
// fxocDbg_InitDebug
//
// Initialize the FaxOcm
// debug subsystem.
//
// We can be turned on either
// via the [FaxOcmDebug] section
// in the faxsetup.inf, or via the
// the "DebugLevelEx" and "DebugFormatEx"
// under HKLM\Software\Microsoft\Fax
// If both are specified, the registry wins.
//
// In faxocm.inf, we look for
// [FaxOcmDebug]
// ============================
// [DebugLevel] can be one of the following:
// 0 - no debug output
// 1 - see errors only
// 2 - see errors & warnings
// 3 - see all the debug output
//
// [DebugFormat] can be one of the following:
// 0 - print to std output
// 1 - print to file ("FaxSetup.log" in %windir%\system32 directory)
// 2 - print to both
// ============================
//
// Params:
// - hFaxSetupInfHandle - handle to faxsetup.inf
// if applicable.
// Returns:
// - void.
//
void fxocDbg_Init(HINF hFaxSetupInfHandle)
{
BOOL bSuccess = FALSE;
INFCONTEXT Context;
INT iDebugLevel = 0;
INT iDebugFormat = 0;
DBG_ENTER(_T("fxocDbg_Init"),bSuccess);
memset(&Context, 0, sizeof(Context));
if (hFaxSetupInfHandle)
{
// initialize via the INF file.
// We are looking for:
// [FaxOcmDebug]
// DebugLevel = x (0 -> no debug, up to and including 3->full debug)
// find the section in the INF file and the DebugLevel key.
bSuccess = ::SetupFindFirstLine(hFaxSetupInfHandle,
prv_SECTION_FAXOCMDEBUG,
prv_KEY_DEBUGLEVEL,
&Context);
if (bSuccess)
{
// we found the DebugLevel key, so get its value.
bSuccess = ::SetupGetIntField(&Context, 1, &iDebugLevel);
if (bSuccess)
{
iDebugLevel = max(iDebugLevel,0);
iDebugLevel = min(iDebugLevel,3);
if (!IS_DEBUG_SESSION_FROM_REG)
{
switch (iDebugLevel)
{
case 0: SET_DEBUG_MASK(ASSERTION_FAILED);
break;
case 1: SET_DEBUG_MASK(DBG_ERRORS_ONLY);
break;
case 2: SET_DEBUG_MASK(DBG_ERRORS_WARNINGS);
break;
case 3: SET_DEBUG_MASK(DBG_ALL);
break;
}
}
}
}
memset(&Context, 0, sizeof(Context));
// find the section in the INF file and the DebugFormat key.
bSuccess = ::SetupFindFirstLine(hFaxSetupInfHandle,
prv_SECTION_FAXOCMDEBUG,
prv_KEY_DEBUGFORMAT,
&Context);
if (bSuccess)
{
// we found the DebugLevel key, so get its value.
bSuccess = ::SetupGetIntField(&Context, 1, &iDebugFormat);
if (bSuccess)
{
iDebugLevel = max(iDebugFormat,0);
iDebugLevel = min(iDebugFormat,2);
if (!IS_DEBUG_SESSION_FROM_REG)
{
switch (iDebugFormat)
{
case 0: SET_FORMAT_MASK(DBG_PRNT_ALL_TO_STD);
break;
case 1: SET_FORMAT_MASK(DBG_PRNT_ALL_TO_FILE);
OPEN_DEBUG_LOG_FILE(prv_DEBUG_FILE_NAME);
SET_DEBUG_FLUSH(FALSE);
break;
case 2: SET_FORMAT_MASK(DBG_PRNT_ALL);
OPEN_DEBUG_LOG_FILE(prv_DEBUG_FILE_NAME);
SET_DEBUG_FLUSH(FALSE);
break;
}
}
}
}
}
}
////////////////////////////////
// fxocDbg_TermDebug
//
// Terminate the debug subsystem
//
// Params:
// - void.
// Returns:
// - void.
//
void fxocDbg_Term(void)
{
DBG_ENTER(_T("fxocDbg_Term"));
CLOSE_DEBUG_LOG_FILE;
}
///////////////////////////////
// fxocDbg_GetOcFunction
//
// This looks up the uiFunction
// in the prv_OC_Function table
// defined above and returns a
// pointer to the text equivalent.
//
// Params:
// - uiFunction - function OC Manager wants us to perform.
// Returns:
// - text equivalent of uiFunction.
//
//
const TCHAR* fxocDbg_GetOcFunction(UINT uiFunction)
{
TCHAR *pszString = _T("");
// NOTE: This function assumes that the table above contains a
// numerically sorted array with the numerical value of
// "uiFunction" equal to its index position in the
// prv_OC_FunctionTable array. We assume this for performance
// purposes.
if (uiFunction < NUM_OC_FUNCTIONS)
{
pszString = prv_OC_FunctionTable[uiFunction].pszFunctionDesc;
}
return pszString;
}