设为首页 加入收藏

TOP

WinVerifyTrust signature verification sample(三)
2015-01-25 00:08:35 来源: 作者: 【 】 浏览:759
Tags:WinVerifyTrust signature verification sample
? ? }?
?
? ? // Get size of hash to be used?
? ? if (!CryptCATAdminCalcHashFromFileHandle2(?
? ? ? ? ? ? ? ? CatAdminHandle,?
? ? ? ? ? ? ? ? FileHandle,?
? ? ? ? ? ? ? ? &HashLength,?
? ? ? ? ? ? ? ? NULL,?
? ? ? ? ? ? ? ? NULL))?
? ? {?
? ? ? ? Error = GetLastError();?
? ? ? ? goto Cleanup;?
? ? }?
?
? ? HashData = (PBYTE) HeapAlloc(GetProcessHeap(), 0, HashLength);?
? ? if (HashData == NULL)?
? ? {?
? ? ? ? Error = ERROR_OUTOFMEMORY;?
? ? ? ? goto Cleanup;?
? ? }?
?
? ? // Generate hash for a give file?
? ? if (!CryptCATAdminCalcHashFromFileHandle2(?
? ? ? ? ? ? ? ? CatAdminHandle,?
? ? ? ? ? ? ? ? FileHandle,?
? ? ? ? ? ? ? ? &HashLength,?
? ? ? ? ? ? ? ? HashData,?
? ? ? ? ? ? ? ? NULL))?
? ? {?
? ? ? ? Error = GetLastError();?
? ? ? ? goto Cleanup;?
? ? }?
?
? ? // Find the first catalog containing this hash?
? ? CatInfoHandle = NULL;?
? ? CatInfoHandle = CryptCATAdminEnumCatalogFromHash(?
? ? ? ? ? ? ? ? CatAdminHandle,?
? ? ? ? ? ? ? ? HashData,?
? ? ? ? ? ? ? ? HashLength,?
? ? ? ? ? ? ? ? 0,?
? ? ? ? ? ? ? ? &CatInfoHandle);?
?
? ? while (CatInfoHandle != NULL)?
? ? {?
? ? ? ? CATALOG_INFO catalogInfo = {};?
? ? ? ? catalogInfo.cbStruct = sizeof(catalogInfo);?
? ? ? ? Found = true;?
?
? ? ? ? if (!CryptCATCatalogInfoFromContext(?
? ? ? ? ? ? ? ? ? ? CatInfoHandle,?
? ? ? ? ? ? ? ? ? ? &catalogInfo,?
? ? ? ? ? ? ? ? ? ? 0))?
? ? ? ? {?
? ? ? ? ? ? Error = GetLastError();?
? ? ? ? ? ? break;?
? ? ? ? }?
?
? ? ? ? wprintf(L"Hash was found in catalog %s\n\n", catalogInfo.wszCatalogFile);?
?
? ? ? ? // Look for the next catalog containing the file's hash?
? ? ? ? CatInfoHandle = CryptCATAdminEnumCatalogFromHash(?
? ? ? ? ? ? ? ? ? ? CatAdminHandle,?
? ? ? ? ? ? ? ? ? ? HashData,?
? ? ? ? ? ? ? ? ? ? HashLength,?
? ? ? ? ? ? ? ? ? ? 0,?
? ? ? ? ? ? ? ? ? ? &CatInfoHandle);?
? ? }?
?
? ? if (Found != true)?
? ? {?
? ? ? ? wprintf(L"Hash was not found in any catalogs.\n");?
? ? }?
?
Cleanup:?
? ? if (CatAdminHandle != NULL)?
? ? {?
? ? ? ? if (CatInfoHandle != NULL)?
? ? ? ? {?
? ? ? ? ? ? CryptCATAdminReleaseCatalogContext(CatAdminHandle, CatInfoHandle, 0);?
? ? ? ? }?
?
? ? ? ? CryptCATAdminReleaseContext(CatAdminHandle, 0);?
? ? }?
?
? ? if (HashData != NULL)?
? ? {?
? ? ? ? HeapFree(GetProcessHeap(), 0, HashData);?
? ? }?
?
? ? ?return Error;?
}?
?
int __cdecl wmain(_In_ unsigned int argc, _In_reads_(argc) PCWSTR wargv[])?
{?
? ? DWORD Error = ERROR_SUCCESS;?
? ? HANDLE FileHandle = INVALID_HANDLE_VALUE;?
? ? DWORD ArgStart = 1;?
? ? bool UseStrongSigPolicy = false;?
?
? ? if (argc < 3 || argc > 4)?
? ? {?
? ? ? ? PrintUsage(wargv[0]);?
? ? ? ? Error = ERROR_INVALID_PARAMETER;?
? ? ? ? goto Cleanup;?
? ? }?
?
? ? if (_wcsicmp(wargv[ArgStart], L"-p") == 0)?
? ? {?
? ? ? ? UseStrongSigPolicy = true;?
? ? ? ? ArgStart++;?
? ? }?
?
? ? if (ArgStart + 1 >= argc)?
? ? {?
? ? ? ? PrintUsage(wargv[0]);?
? ? ? ? Error = ERROR_INVALID_PARAMETER; ? ? ? ??
? ? ? ? goto Cleanup;?
? ? }?
? ? ?
? ? if ((wcslen(wargv[ArgStart]) != 2) ||?
? ? ? ? ((_wcsicmp(wargv[ArgStart], L"-c") != 0) &&?
? ? ? ? ?(_wcsicmp(wargv[ArgStart], L"-e") != 0)))?
? ? { ? ?
? ? ? ? PrintUsage(wargv[0]);?
? ? ? ? Error = ERROR_INVALID_PARAMETER; ? ? ? ??
? ? ? ? goto Cleanup;?
? ? }?
?
? ? FileHandle = CreateFileW(wargv[ArgStart+1],?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GENERIC_READ,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?FILE_SHARE_READ,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NULL,?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇图像编程学习笔记3――图像旋转 下一篇图像编程学习笔记4――24位真彩色..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: