LogFile.h
上传用户:jstlsd
上传日期:2007-01-13
资源大小:186k
文件大小:2k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. //---------------------------------------------------------------------------
  2. //
  3. // LogFile.h
  4. //
  5. // SUBSYSTEM:   Hook system
  6. //
  7. // MODULE:      
  8. //
  9. // DESCRIPTION: Common utilities. 
  10. //              Provides an interface for logging facilities
  11. // 
  12. //             
  13. // AUTHOR: Ivo Ivanov (ivopi@hotmail.com)
  14. // DATE: 2001 December v1.00
  15. //
  16. //---------------------------------------------------------------------------
  17. #if !defined(_LOGFILE_H_)
  18. #define _LOGFILE_H_
  19. #if _MSC_VER > 1000
  20. #pragma once
  21. #endif // _MSC_VER > 1000
  22. #include <share.h>
  23. #include <stdio.h>
  24. //---------------------------------------------------------------------------
  25. //
  26. // class CLogFile 
  27. //
  28. //---------------------------------------------------------------------------
  29. class CLogFile
  30. {
  31. public:
  32. CLogFile(BOOL bTraceEnabled):
  33.   m_bTraceEnabled(bTraceEnabled)
  34. {
  35. m_hMutex = ::CreateMutex(
  36. NULL, 
  37. FALSE, 
  38. "{45428D53-A5DB-4168-BD3C-658419B60279}"
  39. ); 
  40. }
  41. virtual ~CLogFile()
  42. {
  43. ::CloseHandle(m_hMutex);
  44. }
  45. void InitializeFileName(char* pszFileName)
  46. {
  47. strcpy(m_szFileName, pszFileName);
  48. }
  49. void DoLogMessage(char* pszMessage)
  50. {
  51. ::WaitForSingleObject(m_hMutex, INFINITE);
  52. __try
  53. {
  54. if (m_bTraceEnabled)
  55. {
  56. FILE* pOutFile;
  57. char  szFlags[2];
  58. strcpy(szFlags, "a");
  59. pOutFile = _fsopen(m_szFileName, szFlags, _SH_DENYNO);
  60. if (pOutFile != NULL)
  61. {
  62. char szPrintMessage[MAX_PATH];
  63. fseek(pOutFile, 0L, SEEK_END);
  64. sprintf(szPrintMessage, "%sn", pszMessage);
  65. fputs(szPrintMessage, pOutFile);            
  66. fflush(pOutFile);
  67. fclose(pOutFile);
  68. } // if
  69. } // if
  70. }
  71. __finally
  72. {
  73. ::ReleaseMutex(m_hMutex);
  74. }
  75. }
  76. private:
  77. //
  78. // Determines whether to use a log file management
  79. //
  80. BOOL             m_bTraceEnabled;
  81. //
  82. // Name of the log file
  83. //
  84. char             m_szFileName[MAX_PATH];
  85. //
  86. // Handle to the mutex used as guard
  87. //
  88. HANDLE           m_hMutex;
  89. };
  90. #endif // !defined(_LOGFILE_H_)
  91. //--------------------- End of the file -------------------------------------