288 lines
5.6 KiB
C++
288 lines
5.6 KiB
C++
//
|
|
//
|
|
//***************************************************************************
|
|
//
|
|
// judyp May 1999
|
|
//
|
|
//***************************************************************************
|
|
|
|
#include "stdafx.h"
|
|
|
|
#pragma warning (disable : 4786)
|
|
#pragma warning (disable : 4275)
|
|
|
|
#include <iostream>
|
|
#include <strstream>
|
|
#include <fstream>
|
|
#include <string>
|
|
#include <sstream>
|
|
#include <map>
|
|
#include <ctime>
|
|
#include <list>
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
#include <tchar.h>
|
|
#include <windows.h>
|
|
#ifdef NONNT5
|
|
typedef unsigned long ULONG_PTR;
|
|
#endif
|
|
#include <wmistr.h>
|
|
#include <guiddef.h>
|
|
#include <initguid.h>
|
|
#include <evntrace.h>
|
|
|
|
#include <WTYPES.H>
|
|
#include "t_string.h"
|
|
|
|
#include "StructureWrappers.h"
|
|
#include "StructureWapperHelpers.h"
|
|
#include "ConstantMap.h"
|
|
#include "TCOData.h"
|
|
#include "Persistor.h"
|
|
#include "Logger.h"
|
|
#include "Validator.h"
|
|
#include "Utilities.h"
|
|
|
|
#include "CollectionControl.h"
|
|
|
|
// Enable all Guids
|
|
int EnableTraceAPI
|
|
(
|
|
IN LPTSTR lptstrAction, // For logging only.
|
|
IN LPCTSTR lpctstrDataFile, // For logging only.
|
|
IN LPCTSTR lpctstrTCODetailFile, // If valid we will log to it, can be NULL.
|
|
IN bool bLogExpected, // If true we log expected vs actual result.
|
|
IN OUT TCOData *pstructTCOData, // TCO test data.
|
|
OUT int *pAPIReturn // EnableTrace API call return
|
|
)
|
|
{
|
|
*pAPIReturn = -1;
|
|
|
|
|
|
ULONG ulResult =
|
|
EnableTraceAPI
|
|
(
|
|
lptstrAction,
|
|
lpctstrDataFile,
|
|
lpctstrTCODetailFile,
|
|
bLogExpected,
|
|
-1,
|
|
pstructTCOData,
|
|
pAPIReturn
|
|
);
|
|
|
|
for (int i = 0; i < pstructTCOData->m_nGuids; i++)
|
|
{
|
|
ulResult =
|
|
EnableTraceAPI
|
|
(
|
|
lptstrAction,
|
|
lpctstrDataFile,
|
|
NULL, // Write detail only for the first Guid enabled!
|
|
bLogExpected,
|
|
i,
|
|
pstructTCOData,
|
|
pAPIReturn
|
|
);
|
|
}
|
|
return ulResult;
|
|
|
|
}
|
|
|
|
int EnableTraceAPI
|
|
(
|
|
IN LPTSTR lptstrAction, // For logging only.
|
|
IN LPCTSTR lpctstrDataFile, // For logging only.
|
|
IN LPCTSTR lpctstrTCODetailFile, // If valid we will log to it, can be NULL.
|
|
IN bool bLogExpected, // If true we log expected vs actual result.
|
|
IN int nGuidIndex, // Index or if -1 use Guid from WNode.
|
|
IN OUT TCOData *pstructTCOData, // TCO test data.
|
|
OUT int *pAPIReturn // EnableTrace API call return
|
|
)
|
|
{
|
|
|
|
LPTSTR lpstrReturnedError = NULL;
|
|
|
|
CLogger *pDetailLogger = NULL;
|
|
|
|
int nResult = 0;
|
|
|
|
// We only log if the test of "interest" is EnableTrace.
|
|
if (pstructTCOData->m_ulAPITest == TCOData::EnableTraceTest)
|
|
{
|
|
nResult =
|
|
OpenLogFiles
|
|
(
|
|
lpctstrTCODetailFile,
|
|
pDetailLogger,
|
|
&lpstrReturnedError
|
|
);
|
|
}
|
|
|
|
|
|
if (FAILED(nResult))
|
|
{
|
|
delete pDetailLogger;
|
|
// Open log files sets error string lpstrReturnedError.
|
|
|
|
LogSummaryBeforeCall
|
|
(
|
|
pstructTCOData,
|
|
lpctstrDataFile,
|
|
lptstrAction,
|
|
_T("EnableTrace"),
|
|
bLogExpected
|
|
);
|
|
|
|
LogSummaryAfterCall
|
|
(
|
|
pstructTCOData,
|
|
lpctstrDataFile,
|
|
lptstrAction,
|
|
nResult,
|
|
lpstrReturnedError,
|
|
bLogExpected
|
|
);
|
|
free(lpstrReturnedError);
|
|
lpstrReturnedError = NULL;
|
|
return nResult;
|
|
}
|
|
|
|
// This is our log file.
|
|
if (pDetailLogger)
|
|
{
|
|
pDetailLogger->LogTCHAR(_T("\n-------------------------------------------------------\n"));
|
|
pDetailLogger->LogTCHAR(_T("EnableTraceAPI TCO test "));
|
|
pDetailLogger->Flush();
|
|
}
|
|
|
|
if (pDetailLogger)
|
|
{
|
|
pDetailLogger->LogTCHAR(pstructTCOData->m_lptstrShortDesc);
|
|
int n = pDetailLogger->LogTCHAR(_T(" started at time "));
|
|
time_t Time;
|
|
time(&Time);
|
|
pDetailLogger->LogTime(Time);
|
|
pDetailLogger->LogTCHAR(_T(".\n"));
|
|
pDetailLogger->Flush();
|
|
}
|
|
|
|
BOOL bAdmin = IsAdmin();
|
|
|
|
if (pDetailLogger)
|
|
{
|
|
// Log argument values before calling StopTrace.
|
|
LogDetailBeforeCall
|
|
(
|
|
pDetailLogger,
|
|
pstructTCOData,
|
|
bAdmin
|
|
);
|
|
}
|
|
|
|
LogSummaryBeforeCall
|
|
(
|
|
pstructTCOData,
|
|
lpctstrDataFile,
|
|
lptstrAction,
|
|
_T("EnableTrace"),
|
|
bLogExpected
|
|
);
|
|
|
|
GUID Guid = nGuidIndex == -1 ?
|
|
pstructTCOData->m_pProps->Wnode.Guid:
|
|
pstructTCOData->m_lpguidArray[nGuidIndex];
|
|
|
|
*pAPIReturn =
|
|
EnableTrace
|
|
(
|
|
pstructTCOData->m_ulEnable ? TRUE : FALSE,
|
|
pstructTCOData->m_ulEnableFlag,
|
|
pstructTCOData->m_ulEnableLevel,
|
|
&Guid,
|
|
*pstructTCOData->m_pTraceHandle
|
|
);
|
|
|
|
ULONG ulResult = pstructTCOData->m_ulExpectedResult == *pAPIReturn ? ERROR_SUCCESS : -1;
|
|
|
|
if (ulResult != ERROR_SUCCESS && *pAPIReturn == ERROR_SUCCESS)
|
|
{
|
|
ulResult = *pAPIReturn;
|
|
}
|
|
else if (*pAPIReturn != ERROR_SUCCESS)
|
|
{
|
|
lpstrReturnedError = DecodeStatus(*pAPIReturn);
|
|
}
|
|
else if (pstructTCOData->m_ulAPITest == TCOData::EnableTraceTest &&
|
|
pstructTCOData->m_lptstrValidator &&
|
|
_tcslen(pstructTCOData->m_lptstrValidator) > 0)
|
|
{
|
|
CValidator Validator;
|
|
|
|
bool bValid =
|
|
Validator.Validate
|
|
(
|
|
pstructTCOData->m_pTraceHandle,
|
|
pstructTCOData->m_lptstrInstanceName,
|
|
pstructTCOData->m_pProps,
|
|
pstructTCOData->m_lptstrValidator
|
|
);
|
|
|
|
if (!bValid)
|
|
{
|
|
ulResult = -1;
|
|
lpstrReturnedError = NewTCHAR(_T("Validation routine failed."));
|
|
}
|
|
}
|
|
|
|
t_string tsBanner;
|
|
LPTSTR lptstrGuid = NULL;
|
|
|
|
if (pstructTCOData->m_pProps != 0 &&
|
|
Guid.Data1 != 0 &&
|
|
Guid.Data2 != 0 &&
|
|
Guid.Data3 != 0)
|
|
{
|
|
lptstrGuid = LPTSTRFromGuid(Guid);
|
|
tsBanner = _T("EnableTrace for Guid:");
|
|
tsBanner += lptstrGuid;
|
|
free (lptstrGuid);
|
|
lptstrGuid = NULL;
|
|
}
|
|
|
|
if (pDetailLogger)
|
|
{
|
|
LogDetailAfterCall
|
|
( pDetailLogger,
|
|
pstructTCOData,
|
|
&pstructTCOData->m_pProps,
|
|
*pAPIReturn,
|
|
lpstrReturnedError,
|
|
true,
|
|
bAdmin,
|
|
tsBanner.length() > 0 ? tsBanner.c_str() : NULL,
|
|
false
|
|
);
|
|
}
|
|
|
|
tsBanner.erase();
|
|
|
|
LogSummaryAfterCall
|
|
(
|
|
pstructTCOData,
|
|
lpctstrDataFile,
|
|
lptstrAction,
|
|
*pAPIReturn,
|
|
lpstrReturnedError,
|
|
bLogExpected
|
|
);
|
|
|
|
|
|
free(lpstrReturnedError);
|
|
lpstrReturnedError = NULL;
|
|
|
|
return ulResult;
|
|
} |