//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1996 - 1999 // // File: makecat.cpp // // Contents: Microsoft Internet Security Catalog Utilities // // Functions: wmain // // History: 05-May-1997 pberkman created // //-------------------------------------------------------------------------- #include #include #include #include #include #include #include "unicode.h" #include "wincrypt.h" #include "wintrust.h" #include "mssip.h" #include "mscat.h" #include "dbgdef.h" #include "gendefs.h" #include "printfu.hxx" #include "cwargv.hxx" #include "resource.h" WCHAR *pwszFile = NULL; PrintfU_ *pPrint = NULL; int iRet = 0; WCHAR gszUsage[] = L"usage: calchash filename\n -?: this screen\n" ; const char RgchHex[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; ////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////// void FormatHashString(LPSTR *ppString, DWORD cbBlob, BYTE *pblob) { DWORD i, j = 0; BYTE *pb = NULL; DWORD numCharsInserted = 0; LPSTR psz; *ppString = NULL; pb = pblob; // fill the buffer i=0; while (j < cbBlob) { if ((*ppString) == NULL) { psz = NULL; *ppString = (LPSTR) malloc(3 * sizeof(char)); } else { psz = *ppString; #pragma prefast(suppress:308, "the pointer was saved above (PREfast bug 506)") *ppString = (LPSTR) realloc(*ppString, (j+1) * 3 * sizeof(char)); } if (*ppString == NULL) { if (psz != NULL) { free(psz); } return; } (*ppString)[i++] = RgchHex[(*pb & 0xf0) >> 4]; (*ppString)[i++] = RgchHex[*pb & 0x0f]; (*ppString)[i++] = ' '; pb++; j++; } (*ppString)[i-1] = 0; } extern "C" int __cdecl wmain(int argc, WCHAR **wargv) { int cMember; cWArgv_ *pArgs; BOOL fFailed; CRYPTCATCDF *pCDF; CRYPTCATMEMBER *pMember; LPWSTR pwszMemberTag; CRYPTCATATTRIBUTE *pAttr; BOOL fContinueOnError; BYTE pbHash[40]; DWORD cbHash = sizeof(pbHash); HANDLE hFile; LPSTR psz; pCDF = NULL; if (!(pArgs = new cWArgv_((HINSTANCE)GetModuleHandle(NULL), &fFailed))) { goto MemoryError; } if (fFailed) { goto MemoryError; } pArgs->AddUsageText(IDS_USAGETEXT_USAGE, IDS_USAGETEXT_OPTIONS, IDS_USAGETEXT_OPTPARAM, IDS_USAGETEXT_FILENAME, IDS_USAGETEXT_OPTPARAM); pArgs->Add2List(IDS_PARAM_HELP, IDS_PARAMTEXT_HELP, WARGV_VALUETYPE_BOOL, (void *)FALSE); pArgs->Fill(argc, wargv); if (!(pArgs->Fill(argc, wargv)) || (pArgs->GetValue(IDS_PARAM_HELP))) { wprintf(L"%s", gszUsage); goto NeededHelp; } if (!(pwszFile = pArgs->GetFileName())) { wprintf(L"%s",gszUsage); goto ParamError; } pPrint = new PrintfU_; SetLastError(0); if ((hFile = CreateFileU(pwszFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { wprintf(L"Cannot open file - GLE = %lx\n", GetLastError()); goto CATCloseError; } if (!CryptCATAdminCalcHashFromFileHandle(hFile, &cbHash, pbHash, 0)) { goto CATCloseError; } FormatHashString(&psz, cbHash, pbHash); if (psz != NULL) { printf("%s\n", psz); free(psz); } else { goto MemoryError; } CommonReturn: DELETE_OBJECT(pArgs); DELETE_OBJECT(pPrint); return(iRet); ErrorReturn: iRet = 1; goto CommonReturn; TRACE_ERROR_EX(DBG_SS_APP, MemoryError); TRACE_ERROR_EX(DBG_SS_APP, ParamError); TRACE_ERROR_EX(DBG_SS_APP, NeededHelp); TRACE_ERROR_EX(DBG_SS_APP, CATCloseError); }