|
|
/*++
Copyright (c) 1989-2000 Microsoft Corporation
Module Name:
Log.cpp
Abstract:
This module implements the code for manipulating the log file.
Author:
clupu created 02/08/2001
Revision History:
--*/
#include "stdafx.h"
#include "Log.h"
#include <stdio.h>
#include <stdarg.h>
BOOL g_bFileLogEnabled; TCHAR g_szFileLog[MAX_PATH];
BOOL InitFileLogSupport( LPCTSTR lpszLogFileName ) { HANDLE hFile = INVALID_HANDLE_VALUE; HANDLE hMap = NULL; PBYTE pMap; PISSUEREC pRecord;
g_bFileLogEnabled = FALSE;
//
// The file log will be located on %windir%
//
GetSystemWindowsDirectory(g_szFileLog, MAX_PATH);
lstrcat(g_szFileLog, _T("\\AppPatch\\")); lstrcat(g_szFileLog, lpszLogFileName);
//
// Try open the file. Create it if it doesn't exist.
//
hFile = CreateFile(g_szFileLog, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if ( hFile == INVALID_HANDLE_VALUE ) { LogMessage(LOG_ERROR, _T("[InitFileLogSupport] Cannot create log file.")); return FALSE; }
hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, LOGFILESIZE, NULL);
if ( hMap == NULL ) { LogMessage(LOG_ERROR, _T("[LogAVStatus] CreateFileMapping failed. Status 0x%x"), GetLastError()); goto CleanupAndFail; }
pMap = (PBYTE)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, LOGFILESIZE);
if ( pMap == NULL ) { LogMessage(LOG_ERROR, _T("[LogAVStatus] MapViewOfFile failed.")); goto CleanupAndFail; }
ZeroMemory(pMap, LOGFILESIZE);
//
// Write the log header.
//
LOGFILEHEADER LogHeader; char szTemp[64]; DWORD cbSize;
ZeroMemory(&LogHeader, sizeof(LOGFILEHEADER));
lstrcpyA(LogHeader.szMagic, LOG_FILE_MAGIC);
LogHeader.dwRecords = MAX_ISSUES_COUNT;
LogHeader.OSVersion.dwOSVersionInfoSize = sizeof(LogHeader.OSVersion);
GetVersionExA((OSVERSIONINFOA*)&LogHeader.OSVersion); GetLocalTime(&LogHeader.time);
cbSize = 64; GetUserNameA(szTemp, &cbSize); CopyMemory(LogHeader.szUserName, szTemp, 63); LogHeader.szUserName[63] = 0;
cbSize = 64; GetComputerNameA(szTemp, &cbSize); CopyMemory(LogHeader.szMachineName, szTemp, 63); LogHeader.szUserName[63] = 0;
//
// Log the app start event.
//
pRecord = (ISSUEREC*)(pMap + sizeof(LOGFILEHEADER));
pRecord += EVENTIND(AVS_APP_STARTED);
(pRecord->dwOccurenceCount)++;
FlushViewOfFile(pMap, 0);
//
// Set the global that tells file logging is enabled.
//
g_bFileLogEnabled = TRUE;
CleanupAndFail:
if ( pMap != NULL ) { UnmapViewOfFile(pMap); }
if ( hMap != NULL ) { CloseHandle(hMap); }
if ( hFile != INVALID_HANDLE_VALUE ) { CloseHandle(hFile); }
return g_bFileLogEnabled; }
BOOL LogAVStatus( DWORD dwStatus ) { HANDLE hFile = INVALID_HANDLE_VALUE; HANDLE hMap = NULL; PBYTE pMap = NULL; BOOL bReturn = FALSE; PISSUEREC pRecord;
if ( !g_bFileLogEnabled ) { return FALSE; }
hFile = CreateFile(g_szFileLog, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL);
if ( hFile == INVALID_HANDLE_VALUE ) { LogMessage(LOG_ERROR, _T("[LogAVStatus] Cannot open the log file.")); goto CleanupAndFail; }
hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, LOGFILESIZE, NULL);
if ( hMap == NULL ) { LogMessage(LOG_ERROR, _T("[LogAVStatus] CreateFileMapping failed.")); goto CleanupAndFail; }
pMap = (PBYTE)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, LOGFILESIZE);
if ( pMap == NULL ) { LogMessage(LOG_ERROR, _T("[LogAVStatus] MapViewOfFile failed.")); goto CleanupAndFail; }
pRecord = (PISSUEREC)(pMap + sizeof(LOGFILEHEADER));
pRecord += EVENTIND(dwStatus);
(pRecord->dwOccurenceCount)++;
FlushViewOfFile(pMap, 0);
bReturn = TRUE;
CleanupAndFail:
if ( pMap != NULL ) { UnmapViewOfFile(pMap); }
if ( hMap != NULL ) { CloseHandle(hMap); }
if ( hFile != INVALID_HANDLE_VALUE ) { CloseHandle(hFile); }
return bReturn; }
|