www.pudn.com > BAV.v2.rar > define.h, change:2005-08-21,size:3640b
#pragma once
//////////////////////////////////////////////////////////////////////////
//
// ENUM
//
enum BAV_ACTION{ BA_SCAN, BA_ASK, BA_CLEAN, BA_DELETE};
enum BAV_RESULT{ BR_EXCEPTION=-1, BR_NO_VIRUS, BR_WITH_VIRUS, BR_CLEARED, BR_CLEAR_FAILED, BR_DELETED, BR_DELETE_FAILED, BR_IGNORE};
enum BAV_SIGN_TYPE { BS_PHY_FILE=0 /*physical file*/, BS_STRUCT_OFFSET /*offset of a struct*/ };
enum BAV_SIGN_LOGIC_OPERATION { BL_EQUAL=0, BL_NOT_EQUAL };
enum BAV_OBJ_TYPE {BO_PHY_FILE=0, BO_MEM_FILE, BO_BOOT_SECTOR};
enum BAV_TREAT_TYPE { BT_SCANONLY, BT_RENAME, BT_DELETE }; //目前只有几种处理方法,实际会有很多。
//////////////////////////////////////////////////////////////////////////
//
// KEY STRUCTS
//
typedef struct tagScanParam
{
// control the struct version
INT nSize;
// Using CString first, it support both ASCII and UNICODE.
// We can replace it by any compatible class later.
CString strPathName;
// what action will be taken
BAV_ACTION eAction;
}SCAN_PARAM, *PSCAN_PARAM;
class CScanObject;
typedef struct tagScanRecord
{
// Virus ID, use this to query the name and other information
DWORD dwVirusID;
// how the infected file was treated
BAV_RESULT eResult;
// scan object
CScanObject* pScanObject;
// link to next record
tagScanRecord* pNext;
}SCAN_RECORD, *PSCAN_RECORD;
typedef struct tagScanResults
{
// control the struct version
INT nSize;
// total objects count, include all files and other objects.
DWORD dwObjCount;
// total time used
DWORD dwTime;
// total count of records which will be displayed.
DWORD dwRecCount;
PSCAN_RECORD pScanRecords;
}SCAN_RESULTS, *PSCAN_RESULTS;
//////////////////////////////////////////////////////////////////////////
//
// VSIGNATURE
//
#define MAX_SIGNATURE_LEN 32
// BAV_SIGN_TYPE.dwType == BS_PHY_FILE
// dwSubType: 0
// nOffset: offset in file
// nSize: size of signature (in bytes)
// eLogicOp: how the signature compare with the target
// Signature: signatures array. max length is MAX_SIGNATURE_LEN defined above.
// BAV_SIGN_TYPE.dwType == BS_STRUCT_OFFSET
// dwSubType:
#define BS_SUB_PE_BEGIN 0x00000100
#define BS_SUB_NT_HEADERS (BS_SUB_PE_BEGIN+1)
#define BS_SUB_ENTRY_POINT (BS_SUB_PE_BEGIN+2)
#define BS_SUB_PE_END (BS_SUB_PE_BEGIN+0xFF)
typedef struct tagVSIGNATURE
{
BAV_SIGN_TYPE eType;
DWORD dwSubType;
INT nOffset;
INT nSize;
BAV_SIGN_LOGIC_OPERATION eLogicOp;
BYTE Signature[MAX_SIGNATURE_LEN];
}VSIGNATURE, *PVSIGNATURE;
typedef struct tagVTREATMENT
{
BAV_TREAT_TYPE eType;
DWORD dwParam1;
DWORD dwParam2;
}VTREATMENT, *PVTREATMENT;
typedef struct tagVRECORD
{
// control the struct version
INT nSize;
DWORD dwVirusID;
DWORD dwSignCount;
PVSIGNATURE pVSing[8];
DWORD dwTreatCount;
PVTREATMENT pVTreat[8];
}VRECORD, *PVRECORD;
#define MAX_SECTIONS 64
#define MAX_IMPORTS 64
// File Struct PE
typedef struct tagFSPE
{
// control the struct version
INT nSize;
INT m_nSectionCount;
INT m_nImportCount;
bool m_bMZFile;
bool m_bPEFile;
PIMAGE_DOS_HEADER m_pImageDosHeader;
PIMAGE_FILE_HEADER m_pFileHeader;
PIMAGE_OPTIONAL_HEADER32 m_pOptionalHeader;
PIMAGE_SECTION_HEADER m_aSectionHeaders[MAX_SECTIONS];
PIMAGE_NT_HEADERS m_pNtHeaders;
PIMAGE_IMPORT_DESCRIPTOR m_aImportDescriptors[MAX_IMPORTS];
PIMAGE_EXPORT_DIRECTORY m_pExportDirectory;
PIMAGE_RESOURCE_DIRECTORY m_pResourceDirectory;
// common use
LPBYTE m_pEntryPoint;
}FSPE, *PFSPE;