#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