|
|
#ifndef _ATTR_H
#define _ATTR_H
#include "windows.h"
#include "acFileAttr.h"
#if DBG
void LogMsgDbg(LPSTR pszFmt, ...); #define LogMsg LogMsgDbg
#else
#define LogMsg
#endif // DBG
struct tagFILEATTR; struct tagFILEATTRMGR;
typedef struct tagFILEATTRVALUE { char* pszValue; // allocated
DWORD dwFlags; DWORD dwValue; // in case it has a DWORD value
WORD wValue[4]; // for Bin Ver cases
WORD wMask[4]; // for mask Bin Ver cases
} FILEATTRVALUE, *PFILEATTRVALUE;
typedef struct tagVERSION_STRUCT { PSTR pszFile; // the name of the file
UINT dwSize; // the size of the version structure
PBYTE VersionBuffer; // the buffer filled by GetFileVersionInfo
VS_FIXEDFILEINFO* FixedInfo; UINT FixedInfoSize;
} VERSION_STRUCT, *PVERSION_STRUCT;
typedef struct tagFILEATTRMGR {
FILEATTRVALUE arrAttr[VTID_LASTID - 2]; VERSION_STRUCT ver; BOOL bInitialized;
} FILEATTRMGR, *PFILEATTRMGR;
typedef BOOL (*PFNQUERYVALUE)(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); typedef int (*PFNBLOBTOSTRING)(BYTE* pBlob, char* pszOut); typedef int (*PFNDUMPTOBLOB)(DWORD dwId, PFILEATTRVALUE pFileAttr, BYTE* pBlob);
#define ATTR_FLAG_AVAILABLE 0x00000001
#define ATTR_FLAG_SELECTED 0x00000002
typedef struct tagFILEATTR { DWORD dwId; char* pszDisplayName; char* pszNameXML; PFNQUERYVALUE QueryValue; PFNBLOBTOSTRING BlobToString; PFNDUMPTOBLOB DumpToBlob; } FILEATTR, *PFILEATTR;
// query functions
BOOL QueryFileSize(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryModuleType(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryBinFileVer(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryBinProductVer(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryFileDateHi(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryFileDateLo(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryFileVerOs(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryFileVerType(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryFileCheckSum(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryFilePECheckSum(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryCompanyName(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryProductVersion(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryProductName(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryFileDescription(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryFileVersion(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryOriginalFileName(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryInternalName(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL QueryLegalCopyright(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr); BOOL Query16BitDescription(PFILEATTRMGR pMgr, PFILEATTRVALUE pFileAttr);
// dumping to blob functions
int DumpDWORD(DWORD dwId, PFILEATTRVALUE pFileAttr, BYTE* pBlob); int DumpBinVer(DWORD dwId, PFILEATTRVALUE pFileAttr, BYTE* pBlob); int DumpString(DWORD dwId, PFILEATTRVALUE pFileAttr, BYTE* pBlob); int DumpUpToBinVer(DWORD dwId, PFILEATTRVALUE pFileAttr, BYTE* pBlob);
// blob to string functions:
int BlobToStringDWORD(BYTE* pBlob, char* pszOut); int BlobToStringLong(BYTE* pBlob, char* pszOut); int BlobToStringBinVer(BYTE* pBlob, char* pszOut); int BlobToStringString(BYTE* pBlob, char* pszOut); int BlobToStringUpToBinVer(BYTE* pBlob, char* pszOut);
#endif // _ATTR_H
|