CodeSignVerify.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include "SpBase.h"
  3. #include "SimpleString.h"
  4. struct CVersionInfo
  5. {
  6. CVersion FileVersion;
  7. CVersion ProductVersion;
  8. CSimpleStringA strProductName;
  9. CSimpleStringA strAuthorName;
  10. CSimpleStringA strCompanyName;
  11. CSimpleStringA strDescription;
  12. CVersionInfo() :strProductName(""), strAuthorName(""), strCompanyName(""), strDescription(""){}
  13. };
  14. struct CSignInfo
  15. {
  16. CSimpleStringA strProgramName;
  17. CSimpleStringA strSignCertSerialNo;
  18. CSimpleStringA strSignCertIssuer;
  19. CSimpleStringA strSignCertSubject;
  20. CSmallDateTime dtSignTime;
  21. CSimpleStringA strSignCertHash;
  22. CSignInfo() :strProgramName(""), strSignCertIssuer(""), strSignCertSubject(""), strSignCertHash(""){}
  23. };
  24. // verify code signature & get file version
  25. class CCodeSignVerify
  26. {
  27. public:
  28. CCodeSignVerify(DWORD dwCodePage = 0x04b0, DWORD dwLangID = 0x0804);
  29. ~CCodeSignVerify();
  30. bool GetVersionInfo(const char *pszFileName, CVersionInfo &versionInfo);
  31. bool VerifySignature(const char *pszFileName, CSignInfo &signInfo);
  32. CSimpleStringA GetErrorMsg();
  33. private:
  34. bool IsSignFromTrust(const char *pszFileName);
  35. bool GetSignInfo(const char *pszFileName, CSignInfo &signInfo);
  36. void SetLastErrMsg(const char *pErrMsg = NULL);
  37. bool GetStringFileInfo(void *pVersionInfo, const char *pszKeyName, CSimpleStringA &strValue);
  38. bool GetTimeOfTimeStamp(HCERTSTORE hStore, PCMSG_SIGNER_INFO pSignerInfo, SYSTEMTIME *st);
  39. bool GetProgramName(PCMSG_SIGNER_INFO pSignerInfo, CSimpleStringA &strProgramName);
  40. bool GetSignCertInfo(HCERTSTORE hStore, PCMSG_SIGNER_INFO pSignerInfo, CSimpleStringA &strSerialNum,
  41. CSimpleStringA &strIssuer, CSimpleStringA &strSubject, CSimpleStringA &strCertHash);
  42. bool Sha1Hash(BYTE *pData, int nDataLen, BYTE hash[20]);
  43. private:
  44. CSimpleStringA m_strLastErrMsg;
  45. DWORD m_dwCodePage;
  46. DWORD m_dwLangID;
  47. };