C++ 验证微软数字签名
BOOL CheckFileTrust
(
LPCWSTR lpFileName
)
{
BOOL bRet = FALSE ;
WINTRUST_DATA wd = { 0 };
WINTRUST_FILE_INFO wfi = { 0 };
WINTRUST_CATALOG_INFO wci = { 0 };
CATALOG_INFO ci = { 0 };
HCATADMIN hCatAdmin = NULL ;
if ( ! CryptCATAdminAcquireContext ( & hCatAdmin , NULL , 0 ) )
{
return FALSE ;
}
HANDLE hFile = CreateFileW ( lpFileName , GENERIC_READ , FILE_SHARE_READ ,
NULL , OPEN_EXISTING , 0 , NULL );
if ( INVALID_HANDLE_VALUE == hFile )
{
CryptCATAdminReleaseContext ( hCatAdmin , 0 );
return FALSE ;
}
DWORD dwCnt = 100 ;
BYTE byHash [ 100 ];
CryptCATAdminCalcHashFromFileHandle ( hFile , & dwCnt , byHash , 0 );
CloseHandle ( hFile );
LPWSTR pszMemberTag
{
BOOL bRet = FALSE ;
WINTRUST_DATA wd = { 0 };
WINTRUST_FILE_INFO wfi = { 0 };
WINTRUST_CATALOG_INFO wci = { 0 };
CATALOG_INFO ci = { 0 };
HCATADMIN hCatAdmin = NULL ;
if ( ! CryptCATAdminAcquireContext ( & hCatAdmin , NULL , 0 ) )
{
return FALSE ;
}
HANDLE hFile = CreateFileW ( lpFileName , GENERIC_READ , FILE_SHARE_READ ,
NULL , OPEN_EXISTING , 0 , NULL );
if ( INVALID_HANDLE_VALUE == hFile )
{
CryptCATAdminReleaseContext ( hCatAdmin , 0 );
return FALSE ;
}
DWORD dwCnt = 100 ;
BYTE byHash [ 100 ];
CryptCATAdminCalcHashFromFileHandle ( hFile , & dwCnt , byHash , 0 );
CloseHandle ( hFile );
LPWSTR pszMemberTag