mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-11 11:55:36 +08:00
397 lines
11 KiB
C++
397 lines
11 KiB
C++
|
|
#pragma once
|
|
|
|
#define BUFFER_SIZE 32768
|
|
|
|
class CDllLog
|
|
{
|
|
public:
|
|
CDllLog::CDllLog(wchar_t* logFileName, int mode)
|
|
{
|
|
m_hLog = NULL;
|
|
|
|
if(logFileName == NULL)
|
|
return;
|
|
|
|
if (!mode) // always new
|
|
{
|
|
m_hLog = CreateFileW(logFileName,
|
|
GENERIC_WRITE,
|
|
FILE_SHARE_READ,
|
|
NULL,
|
|
CREATE_ALWAYS,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
NULL);
|
|
if(m_hLog == INVALID_HANDLE_VALUE)
|
|
m_hLog = NULL;
|
|
else
|
|
DefineEOL();
|
|
}
|
|
else
|
|
{
|
|
m_hLog = CreateFileW(logFileName,
|
|
GENERIC_WRITE,
|
|
FILE_SHARE_READ,
|
|
NULL,
|
|
OPEN_ALWAYS,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
NULL);
|
|
|
|
if(m_hLog == INVALID_HANDLE_VALUE)
|
|
m_hLog = NULL;
|
|
else
|
|
{
|
|
DefineEOL();
|
|
|
|
LARGE_INTEGER la;
|
|
::GetFileSizeEx(m_hLog, &la);
|
|
|
|
SetFilePointer(m_hLog, 0, NULL, FILE_END);
|
|
|
|
if (la.QuadPart > 0)
|
|
{
|
|
write(L"\n");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
CDllLog::~CDllLog(void)
|
|
{
|
|
if(m_hLog != NULL)
|
|
{
|
|
FlushFileBuffers(m_hLog);
|
|
CloseHandle(m_hLog);
|
|
m_hLog = NULL;
|
|
}
|
|
}
|
|
|
|
void CDllLog::DefineEOL()
|
|
{
|
|
m_eol[0] = '\r';//0x0D;
|
|
m_eol[1] = '\n';//0x0A;
|
|
m_eol[2] = '\0';//0x00;
|
|
}
|
|
//
|
|
void CDllLog::write(char* string)
|
|
{
|
|
if((m_hLog == NULL) || (string == NULL)){ return;}
|
|
|
|
WriteFile(m_hLog, string, (DWORD)strlen(string), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
|
|
void CDllLog::write(char* string1, char* string2)
|
|
{
|
|
if((m_hLog == NULL) || (string1 == NULL) || (string2 == NULL))
|
|
return;
|
|
|
|
WriteFile(m_hLog, string1, (DWORD)strlen(string1), &len, NULL);
|
|
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
|
|
|
|
WriteFile(m_hLog, string2, (DWORD)strlen(string2), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
|
|
void CDllLog::write(wchar_t* string)
|
|
{
|
|
if ((m_hLog == NULL) || (string == NULL))
|
|
return;
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
|
|
if (ConvertString(string, buf))
|
|
{
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
}
|
|
|
|
void CDllLog::write(wchar_t* string1, wchar_t* string2)
|
|
{
|
|
if ((m_hLog == NULL) || (string1 == NULL) || (string2 == NULL))
|
|
return;
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
|
|
if (ConvertString(string1, buf))
|
|
{
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
|
|
|
|
memset(buf, 0, MAX_PATH);
|
|
|
|
if (ConvertString(string2, buf))
|
|
{
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
void CDllLog::write(wchar_t* string, int value)
|
|
{
|
|
write(string, (LONGLONG)value);
|
|
}
|
|
void CDllLog::write(wchar_t* string, long value)
|
|
{
|
|
write(string, (LONGLONG)value);
|
|
}
|
|
void CDllLog::write(wchar_t* string, LONGLONG value)
|
|
{
|
|
if((m_hLog == NULL) || (string == NULL))
|
|
return;
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
|
|
if (ConvertString(string, buf))
|
|
{
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
_i64toa_s(value, buf, BUFFER_SIZE, 10);
|
|
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
}
|
|
|
|
//
|
|
void CDllLog::write(wchar_t* string, unsigned char value)
|
|
{
|
|
write(string, (ULONGLONG)value);
|
|
}
|
|
void CDllLog::write(wchar_t* string, size_t value)
|
|
{
|
|
write(string, (ULONGLONG)value);
|
|
}
|
|
void CDllLog::write(wchar_t* string, DWORD value)
|
|
{
|
|
write(string, (ULONGLONG)value);
|
|
}
|
|
void CDllLog::write(wchar_t* string, ULONGLONG value)
|
|
{
|
|
if((m_hLog == NULL) || (string == NULL))
|
|
return;
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
|
|
if (ConvertString(string, buf))
|
|
{
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
_ui64toa_s(value, buf, BUFFER_SIZE, 10);
|
|
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
}
|
|
|
|
void CDllLog::writeHex(BYTE* array, long size)
|
|
{
|
|
if((m_hLog == NULL) || (array == NULL)){ return;}
|
|
|
|
#pragma warning (disable:4996)
|
|
strcpy(out, "");
|
|
#pragma warning (default:4996)
|
|
for(long i = 0; i < size; i++)
|
|
{
|
|
#pragma warning (disable:4996)
|
|
itoa(*(array+i), buf, 16);
|
|
strcat(out, buf);
|
|
strcat(out, " ");
|
|
#pragma warning (default:4996)
|
|
}
|
|
|
|
WriteFile(m_hLog, out, (DWORD)strlen(out), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
|
|
}
|
|
void CDllLog::writeHex(wchar_t* string, DWORD value)
|
|
{
|
|
if((m_hLog == NULL) || (string == NULL))
|
|
return;
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
|
|
if (ConvertString(string, buf))
|
|
{
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
_ltoa_s(value, buf, BUFFER_SIZE, 16);
|
|
|
|
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
}
|
|
|
|
void CDllLog::writeTime(wchar_t* string, DWORD hour, DWORD min, DWORD sec, DWORD millisec)
|
|
{
|
|
if((m_hLog == NULL) || (string == NULL)){ return;}
|
|
|
|
USES_CONVERSION;
|
|
|
|
if (ConvertString(string, buf))
|
|
{
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, "\t\t", (DWORD)strlen("\t\t"), &len, NULL);
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
_ltoa_s((long)hour, buf, BUFFER_SIZE, 10);
|
|
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, ":", (DWORD)strlen(":"), &len, NULL);
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
_ltoa_s((long)min, buf, BUFFER_SIZE, 10);
|
|
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, ":", (DWORD)strlen(":"), &len, NULL);
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
_ltoa_s((long)sec, buf, BUFFER_SIZE, 10);
|
|
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
WriteFile(m_hLog, ":", (DWORD)strlen(":"), &len, NULL);
|
|
|
|
memset(buf, 0, BUFFER_SIZE);
|
|
_ltoa_s((long)millisec, buf, BUFFER_SIZE, 10);
|
|
|
|
WriteFile(m_hLog, buf, (DWORD)strlen(buf), &len, NULL);
|
|
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
}
|
|
|
|
//
|
|
void CDllLog::writeWindowsVersion(DWORD winVer)
|
|
{
|
|
if(m_hLog == NULL){ return;}
|
|
|
|
write(L"OS:", GetWinVerDescription(winVer));
|
|
|
|
write(L"");
|
|
}
|
|
|
|
BSTR CDllLog::GetWinVerDescription(long code)
|
|
{
|
|
// need WinVer.h
|
|
switch (code)
|
|
{
|
|
case 0: return L"Win_Unknown"; break;
|
|
case 1: return L"Win95"; break;
|
|
case 2: return L"Win95_OSR2"; break;
|
|
case 3: return L"Win98"; break;
|
|
case 4: return L"Win98_SE"; break;
|
|
case 5: return L"WinMe"; break;
|
|
|
|
case 6: return L"WinNT"; break;
|
|
case 7: return L"WinNT_351"; break;
|
|
case 8: return L"WinNT_40_Workstation"; break;
|
|
case 9: return L"WinNT_40_Server"; break;
|
|
case 10: return L"WinNT_40_Server_Enterprise"; break;
|
|
|
|
case 11: return L"Win2000_Unknown"; break;
|
|
case 12: return L"Win2000_Professional"; break;
|
|
case 13: return L"Win2000_Server"; break;
|
|
case 14: return L"Win2000_Server_Datacenter"; break;
|
|
case 15: return L"Win2000_Server_Advanced"; break;
|
|
|
|
case 16: return L"WinXP"; break;
|
|
case 17: return L"WinXP_Home"; break;
|
|
case 18: return L"WinXP_Professional"; break;
|
|
case 19: return L"WinXP_Professional_x64"; break;
|
|
|
|
case 20: return L"WinServer2003"; break;
|
|
case 21: return L"WinServer2003_Enterprise"; break;
|
|
case 22: return L"WinServer2003_Datacenter"; break;
|
|
case 23: return L"WinServer2003_WebEdition"; break;
|
|
case 24: return L"WinServer2003_IA64"; break;
|
|
case 25: return L"WinServer2003_IA64_Enterprise"; break;
|
|
case 26: return L"WinServer2003_IA64_Datacenter"; break;
|
|
case 27: return L"WinServer2003_AMD64"; break;
|
|
case 28: return L"WinServer2003_AMD64_Enterprise"; break;
|
|
case 29: return L"WinServer2003_AMD64_Datacenter"; break;
|
|
case 30: return L"WinServer2003_R2"; break;
|
|
|
|
case 31: return L"WinVista"; break;
|
|
case 32: return L"WinVistaUnlincensed"; break;
|
|
case 33: return L"WinVistaUltimate"; break;
|
|
case 34: return L"WinVistaBusiness"; break;
|
|
case 35: return L"WinVistaEnterprise"; break;
|
|
case 36: return L"WinVistaHome"; break;
|
|
case 37: return L"WinVistaHomeBasic"; break;
|
|
case 38: return L"WinVistaHomePremium"; break;
|
|
case 39: return L"WinVistaStarter"; break;
|
|
|
|
case 40: return L"WinServer2008"; break;
|
|
case 41: return L"WinServer2008Unlincensed"; break;
|
|
case 42: return L"WinServer2008_Enterprise"; break;
|
|
case 43: return L"WinServer2008_Enterprise_Core"; break;
|
|
case 44: return L"WinServer2008_Enterprise_Full"; break;
|
|
case 45: return L"WinServer2008_Enterprise_IA64"; break;
|
|
case 46: return L"WinServer2008_Datacenter"; break;
|
|
case 47: return L"WinServer2008_Datacenter_Core"; break;
|
|
case 48: return L"WinServer2008_Datacenter_Full"; break;
|
|
case 49: return L"WinServer2008_Standard"; break;
|
|
case 50: return L"WinServer2008_Standard_Core"; break;
|
|
case 51: return L"WinServer2008_Standard_Full"; break;
|
|
case 52: return L"WinServer2008_WebServer"; break;
|
|
case 53: return L"WinServer2008_R2"; break;
|
|
|
|
case 54: return L"WinHomeServer"; break;
|
|
|
|
case 55: return L"Win7"; break;
|
|
case 56: return L"Win7Unlincensed"; break;
|
|
case 57: return L"Win7Ultimate"; break;
|
|
case 58: return L"Win7Business"; break;
|
|
case 59: return L"Win7Enterprise"; break;
|
|
case 60: return L"Win7Home"; break;
|
|
case 61: return L"Win7HomeBasic"; break;
|
|
case 62: return L"Win7HomePremium"; break;
|
|
case 63: return L"Win7Starter"; break;
|
|
|
|
case 64: return L"Win32s"; break;
|
|
|
|
default: return L"Undefined"; break;
|
|
}
|
|
}
|
|
|
|
void CDllLog::writeLine()
|
|
{
|
|
if (m_hLog == NULL)
|
|
return;
|
|
char line[] = "------------------------------------------------------------";
|
|
DWORD len = 0;
|
|
WriteFile(m_hLog, line, (DWORD)(strlen(line)), &len, NULL);
|
|
WriteFile(m_hLog, m_eol, (DWORD)strlen(m_eol), &len, NULL);
|
|
}
|
|
bool CDllLog::ConvertString(wchar_t* input, char* output)
|
|
{
|
|
if (input == NULL)
|
|
return false;
|
|
else
|
|
{
|
|
#pragma warning (disable:4800)
|
|
int len = WideCharToMultiByte(CP_ACP, 0, input, -1, output, 0, NULL, NULL);
|
|
if (len <= BUFFER_SIZE)
|
|
return WideCharToMultiByte(CP_ACP, 0, input, -1, output, len, NULL, NULL);
|
|
else
|
|
return WideCharToMultiByte(CP_ACP, 0, input, BUFFER_SIZE, output, BUFFER_SIZE, NULL, NULL);
|
|
#pragma warning (default:4800)
|
|
}
|
|
}
|
|
|
|
|
|
private:
|
|
HANDLE m_hLog;
|
|
char m_eol[5];
|
|
|
|
unsigned long len;
|
|
char buf[32768];
|
|
char out[32768];
|
|
}; |