windows-nt/Source/XPSP1/NT/sdktools/checksym/filedata.h
2020-09-26 16:20:57 +08:00

99 lines
2.6 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1999 - 2000
//
// File: filedata.h
//
//--------------------------------------------------------------------------
// FileData.h: interface for the CFileData class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_FILEDATA_H__A7830023_AF56_11D2_83E6_000000000000__INCLUDED_)
#define AFX_FILEDATA_H__A7830023_AF56_11D2_83E6_000000000000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef NO_STRICT
#ifndef STRICT
#define STRICT 1
#endif
#endif /* NO_STRICT */
#include <windows.h>
#include <tchar.h>
#include <time.h>
// Forward Declarations
class CProcesses;
class CProcessInfo;
class CModules;
class CModuleInfoCache;
class CFileData
{
public:
CFileData();
virtual ~CFileData();
bool OpenFile(DWORD dwCreateOption = CREATE_NEW, bool fReadOnlyMode = false);
bool CreateFileMapping();
bool CloseFile();
bool EndOfFile();
void PrintLastError();
// Filepath methods
bool SetFilePath(LPTSTR tszFilePath);
LPTSTR GetFilePath();
bool VerifyFileDirectory();
// Checksym output methods...
bool WriteFileHeader();
bool WriteTimeDateString(time_t Time);
bool WriteFileTimeString(FILETIME ftFileTime);
bool WriteTimeDateString2(time_t Time);
bool WriteFileTimeString2(FILETIME ftFileTime);
bool WriteString(LPTSTR tszString, bool fHandleQuotes = false);
bool WriteDWORD(DWORD dwNumber);
// Checksym input methods...
bool ReadFileHeader();
bool ReadFileLine();
DWORD ReadString(LPSTR szStringBuffer = NULL, DWORD iStringBufferSize = 0);
bool ResetBufferPointerToStart();
bool ReadDWORD(LPDWORD lpDWORD);
bool DispatchCollectionObject(CProcesses ** lplpProcesses, CProcessInfo ** lplpProcess, CModules ** lplpModules, CModules ** lplpKernelModeDrivers, CModuleInfoCache * lpModuleInfoCache, CFileData * lpOutputFile);
// Define a constant for our "private" buffer...
enum {LINE_BUFFER_SIZE = 4096};
char m_szLINEBUFFER[LINE_BUFFER_SIZE]; // This saves us tons of create/free stuff...
protected:
bool CopyCharIfRoom(DWORD iStringBufferSize, LPSTR szStringBuffer, LPDWORD piBytesCopied, bool * pfFinished);
LPSTR m_lpCurrentLocationInLINEBUFFER;
LPSTR m_lpCurrentFilePointer;
LPVOID m_lpBaseAddress;
HANDLE m_hFileMappingObject;
// Error methods
inline DWORD GetLastError() { return m_dwGetLastError; };
inline void SetLastError() { m_dwGetLastError = ::GetLastError(); };
LPTSTR m_tszFilePath;
HANDLE m_hFileHandle;
DWORD m_dwGetLastError;
};
#endif // !defined(AFX_FILEDATA_H__A7830023_AF56_11D2_83E6_000000000000__INCLUDED_)