107 lines
3.6 KiB
C
107 lines
3.6 KiB
C
|
|
#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
|