Advertisement
Guest User

Untitled

a guest
Dec 31st, 2018
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. BOOL checkfile(PCWSTR lpFileName)
  2. {
  3.     static GUID gActionID = WINTRUST_ACTION_GENERIC_VERIFY_V2;
  4.     HCATADMIN hCatAdmin;
  5.     BOOL fVerified = FALSE;
  6.     if (CryptCATAdminAcquireContext(&hCatAdmin, 0, 0))
  7.     {
  8.         HANDLE hFile = CreateFileW(lpFileName, FILE_GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
  9.         if (hFile != INVALID_HANDLE_VALUE)
  10.         {
  11.             BYTE bHash[20];
  12.             CATALOG_INFO ci = { sizeof (CATALOG_INFO) };
  13.  
  14.             WINTRUST_CATALOG_INFO wci = {
  15.                 sizeof(WINTRUST_CATALOG_INFO), 0, ci.wszCatalogFile, 0,
  16.                 0, hFile, bHash, sizeof(bHash)
  17.             };
  18.  
  19.             WINTRUST_DATA wtd = {
  20.                 sizeof (WINTRUST_DATA),0,0,
  21.                 WTD_UI_NONE,WTD_REVOKE_NONE,
  22.                 WTD_CHOICE_CATALOG, (PWINTRUST_FILE_INFO)&wci
  23.             };
  24.  
  25.             wtd.dwProvFlags=WTD_REVOCATION_CHECK_NONE;
  26.  
  27.             if (CryptCATAdminCalcHashFromFileHandle(hFile, &wci.cbCalculatedFileHash, bHash, 0))
  28.             {
  29.                 HCATINFO CatInfo = 0;
  30.  
  31.                 while (CatInfo = CryptCATAdminEnumCatalogFromHash(hCatAdmin, bHash, wci.cbCalculatedFileHash, 0, &CatInfo))
  32.                 {
  33.                     if (CryptCATCatalogInfoFromContext(CatInfo, &ci, 0))
  34.                     {
  35.                         DbgPrint("%S\n", ci.wszCatalogFile);
  36.                         if (fVerified = !WinVerifyTrust(0, &gActionID, &wtd)) break;
  37.                     }
  38.                 }
  39.  
  40.                 if (CatInfo) CryptCATAdminReleaseCatalogContext(hCatAdmin, CatInfo, 0);
  41.             }
  42.             CloseHandle(hFile);
  43.         }
  44.         CryptCATAdminReleaseContext(hCatAdmin, 0);
  45.     }
  46.     return fVerified;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement