⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logtrace.cpp

📁 一个内核开发的usb加密解密驱动
💻 CPP
字号:


#include "stdafx.h"
#include "LogTrace.h"

#define __ESCAPE__CHAR _T("\\\\?\\");
#define _ERROR_CODE _T("Error Code : ")

// default constructor
CLogTrace::CLogTrace()
{
	this->fName = _T("Log.txt");
	this->Log   = _T("");
	this->logFP = NULL;
	return;
}

//default destructor
CLogTrace::~CLogTrace()
{
	if(this->Log != NULL)
	{
		free(this->Log);
		this->Log = NULL;
	}

}

//Set File Name
BOOL CLogTrace::SetFileName(LPCTSTR fName)
{
	this->fName = _T("");
	wcscpy(this->fName,fName);
	return TRUE;
}

BOOL CLogTrace::Init()
{
	WCHAR lpFileName[MAX_PATH];
	WCHAR wszFilePath[MAX_PATH];
	WCHAR	wszDrive[_MAX_DRIVE];
	WCHAR	wszDir[_MAX_DIR];



	// Making of full path of control process
	if (!::GetModuleFileNameW(NULL, lpFileName, MAX_PATH)) 
	{
		DWORD dwErr = ::GetLastError();
		return dwErr;
	}

	//Log file path getting generated in the directory of exe
	_wsplitpath_s( lpFileName, wszDrive, _MAX_DRIVE, wszDir, _MAX_DIR, NULL, 0, NULL, 0);
	_wmakepath_s( wszFilePath, _MAX_PATH, wszDrive, wszDir, this->fName, NULL );

	//Open the file in read-write mode
	FILE * logFP =_wfopen(wszFilePath,L"a");
	if(logFP == NULL)
	{
		return FALSE;
	}

}

//Log Simple Text
BOOL CLogTrace::LOG_DBG(LPCTSTR log)
{
	//Start

	if(log != NULL)
	{
		if(!WriteLog())
		{
			return FALSE;
		}
		return TRUE;
	}

	return FALSE;
	//End
}

//Log Text with specific string
BOOL CLogTrace::LOG_DBG(LPCTSTR log, LPCTSTR str)
{
	//Start

	if((log != NULL) && (str != NULL))
	{
		if(!CLogTrace::Format(log,str))
		{
			return FALSE;
		}

		if(!WriteLog())
		{
			return FALSE;
		}
		return TRUE;
	}
	if(this->Log != NULL)
	{
		free(this->Log);
		this->Log = NULL;
	}

	return FALSE;
	//End
}

//Log Text with error code
BOOL CLogTrace::LOG_ERR(LPCTSTR log, DWORD errCode)
{
	//Start

	if(log != NULL)
	{
		if(!CLogTrace::Format(log,errCode))
		{
			return FALSE;
		}

		if(!WriteLog())
		{
			return FALSE;
		}
	}

	if(this->Log != NULL)
	{
		free(this->Log);
		this->Log = NULL;
	}

	return TRUE;

	//End
}

//Format Text strings
BOOL CLogTrace::Format(LPCTSTR log, LPCTSTR str)
{
	//Start
	LPTSTR lpDateTime;
	DWORD totalBufSize = 0;
	
	if(!this->GetDateTime(lpDateTime))
	{
		return FALSE;
	}

	
	if((log != NULL) && (str != NULL))
	{
		totalBufSize = wcslen(log)+wcslen(str)+wcslen(lpDateTime)+10;
		this->Log = (wchar_t*)malloc((totalBufSize+1)*sizeof(wchar_t));
		if(this->Log != NULL)
		{
			_swprintf(this->Log,L"%S\t%S\t%S\r\n",lpDateTime,log,str);
			if(lpDateTime != NULL)
			{
				free(lpDateTime);
				lpDateTime = NULL;
			}

		}
		else{
			return FALSE;
		}
	}
	else{
		return FALSE;
	}

	if(lpDateTime != NULL)
	{
		free(lpDateTime);
		lpDateTime = NULL;
	}

	return TRUE;
	//End
}


//Format String with Error Code
BOOL CLogTrace::Format(LPCTSTR log, DWORD errCode)
{
	//Start

	LPTSTR lpDateTime;
	DWORD totalBufSize = 0;
	
	if(!this->GetDateTime(lpDateTime))
	{
		return FALSE;
	}

	if(log != NULL)
	{
		totalBufSize = wcslen(log)+wcslen(lpDateTime)+wcslen(_ERROR_CODE)+10;
		this->Log = (wchar_t*)malloc((totalBufSize+1)*sizeof(wchar_t));
		if(this->Log != NULL)
		{
			_swprintf(this->Log,L"%S\t%S\t%S%d\r\n",lpDateTime,log,_ERROR_CODE,errCode);
			if(lpDateTime != NULL)
			{
				free(lpDateTime);
				lpDateTime = NULL;
			}
		}
		else{
			return FALSE;
		}

	}

	if(lpDateTime != NULL)
	{
		free(lpDateTime);
		lpDateTime = NULL;
	}

	return TRUE;

	//End
}

//Write Log to the file
BOOL CLogTrace::WriteLog()
{
	//Start
	fputws(this->Log,this->logFP);
	if(this->Log != NULL)
	{
		free(this->Log);
		this->Log = NULL;
	}

	return TRUE;
	//End
}
BOOL CLogTrace::GetDateTime(LPTSTR lpDateTime)
{
	//Start
	LPTSTR lpSysTime = NULL;
	LPTSTR lpSysDate = NULL;
	LPTSTR lpLocalDateTime = NULL;
	UINT bufSize = 0;
	UINT totalBufSize = 0;//Total length of bufsize
	DWORD retVal = 0;

	//Get Formatted Time value
	::GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,NULL,L"hh':'mm':'ss tt",lpSysTime,bufSize);
	if(bufSize != 0)
	{
		lpSysTime = (wchar_t*)malloc((bufSize+1)*sizeof(wchar_t));
	}
	if(lpSysTime == NULL)
	{
		return FALSE;
	}
	else
	{
		::GetTimeFormat(NULL,TIME_FORCE24HOURFORMAT,NULL,L"hh':'mm':'ss tt",lpSysTime,bufSize);
	}
	totalBufSize += bufSize;

	//Get Formatted Date Value
	bufSize = 0;
	::GetDateFormat(NULL,DATE_LONGDATE|DATE_YEARMONTH,NULL,L"dd':'mm':'yyyy",lpSysDate,bufSize);
	if(bufSize != 0)
	{
		lpSysDate = (wchar_t*)malloc((bufSize+1)*sizeof(wchar_t));
	}
	if(lpSysDate == NULL)
	{
		return FALSE;
	}
	else
	{
		::GetDateFormat(NULL,DATE_LONGDATE|DATE_YEARMONTH,NULL,L"dd':'mm':'yyyy",lpSysDate,bufSize);
	}

	totalBufSize += bufSize;

	//Consolidate the formatted time and date
	lpLocalDateTime = (wchar_t*)malloc((totalBufSize+1)*sizeof(wchar_t));
	if(lpLocalDateTime != NULL)
	{
		wcscpy(lpLocalDateTime,lpSysDate);
		wcscpy(lpLocalDateTime,L" : ");
		wcscpy(lpLocalDateTime,lpSysTime);
	}
	else{
		return FALSE;
	}

	lpDateTime = lpLocalDateTime;
	
	// Free Memory
	if(lpSysTime != NULL)
	{
		free(lpSysTime);
		lpSysTime = NULL;
	}
	if(lpSysDate != NULL)
	{
		free(lpSysDate);
		lpSysDate = NULL;
	}
	return TRUE;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -