Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

199 lines
4.9 KiB

//+-------------------------------------------------------------------------
//
// 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 <stdio.h>
#include <windows.h>
#include <io.h>
#include <wchar.h>
#include <malloc.h>
#include <memory.h>
#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);
}