|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: sipadd.cpp
//
// Contents: Microsoft Internet Security SIP Provider
//
// Functions: CryptSIPAddProvider
//
// *** local functions ***
// _RegisterSIPFunc
//
// History: 04-Jun-1997 pberkman created
//
//--------------------------------------------------------------------------
#include "global.hxx"
#include "cryptreg.h"
#include "wintrust.h"
#include "sipbase.h"
BOOL _RegisterSIPFunc(char *pszTag, char *pszGuid, WCHAR *pwszDll, WCHAR *pwszFunc);
BOOL WINAPI CryptSIPAddProvider(IN SIP_ADD_NEWPROVIDER *psNewProv) { BOOL fRet; char szGuid[REG_MAX_GUID_TEXT];
fRet = TRUE;
if (!(psNewProv) || !(WVT_ISINSTRUCT(SIP_ADD_NEWPROVIDER, psNewProv->cbStruct, pwszRemoveFuncName)) || !(psNewProv->pwszDLLFileName) || !(psNewProv->pwszGetFuncName) || !(psNewProv->pwszPutFuncName) || !(psNewProv->pwszCreateFuncName) || !(psNewProv->pwszVerifyFuncName) || !(psNewProv->pwszRemoveFuncName)) { goto InvalidParam; }
if (!(_Guid2Sz(psNewProv->pgSubject, &szGuid[0]))) { goto GuidConvertFailed; }
if (!(_RegisterSIPFunc(SIPFUNC_PUTSIGNATURE, &szGuid[0], psNewProv->pwszDLLFileName, psNewProv->pwszPutFuncName))) { goto RegisterPutFailed; }
if (!(_RegisterSIPFunc(SIPFUNC_GETSIGNATURE, &szGuid[0], psNewProv->pwszDLLFileName, psNewProv->pwszGetFuncName))) { goto RegisterGetFailed; }
if (!(_RegisterSIPFunc(SIPFUNC_REMSIGNATURE, &szGuid[0], psNewProv->pwszDLLFileName, psNewProv->pwszRemoveFuncName))) { goto RegisterRemoveFailed; }
if (!(_RegisterSIPFunc(SIPFUNC_CREATEINDIRECT, &szGuid[0], psNewProv->pwszDLLFileName, psNewProv->pwszCreateFuncName))) { goto RegisterCreateFailed; }
if (!(_RegisterSIPFunc(SIPFUNC_VERIFYINDIRECT, &szGuid[0], psNewProv->pwszDLLFileName, psNewProv->pwszVerifyFuncName))) { goto RegisterVerifyFailed; }
if (psNewProv->pwszIsFunctionName) { if (!(_RegisterSIPFunc(SIPFUNC_ISMYTYPE, &szGuid[0], psNewProv->pwszDLLFileName, psNewProv->pwszIsFunctionName))) { goto RegisterIsMyTypeFailed; } }
if ((WVT_ISINSTRUCT(SIP_ADD_NEWPROVIDER, psNewProv->cbStruct, pwszIsFunctionNameFmt2)) && (psNewProv->pwszIsFunctionNameFmt2)) { if (!(_RegisterSIPFunc(SIPFUNC_ISMYTYPE2, &szGuid[0], psNewProv->pwszDLLFileName, psNewProv->pwszIsFunctionNameFmt2))) { goto RegisterIsMyType2Failed; } }
fRet = TRUE;
CommonReturn: return(fRet);
ErrorReturn: fRet = FALSE; goto CommonReturn;
TRACE_ERROR_EX(DBG_SS, RegisterPutFailed); TRACE_ERROR_EX(DBG_SS, RegisterGetFailed); TRACE_ERROR_EX(DBG_SS, RegisterRemoveFailed); TRACE_ERROR_EX(DBG_SS, RegisterCreateFailed); TRACE_ERROR_EX(DBG_SS, RegisterVerifyFailed); TRACE_ERROR_EX(DBG_SS, RegisterIsMyTypeFailed); TRACE_ERROR_EX(DBG_SS, RegisterIsMyType2Failed); TRACE_ERROR_EX(DBG_SS, GuidConvertFailed);
SET_ERROR_VAR_EX(DBG_SS, InvalidParam, ERROR_INVALID_PARAMETER); }
BOOL WINAPI CryptSIPRemoveProvider(GUID *pgProv) { BOOL fRet; char szGuid[REG_MAX_GUID_TEXT];
if (!(pgProv)) { goto InvalidParam; }
if (!(_Guid2Sz(pgProv, &szGuid[0]))) { goto GuidConvertFailed; }
fRet = TRUE;
fRet &= CryptUnregisterOIDFunction(0, SIPFUNC_PUTSIGNATURE, &szGuid[0]); fRet &= CryptUnregisterOIDFunction(0, SIPFUNC_GETSIGNATURE, &szGuid[0]); fRet &= CryptUnregisterOIDFunction(0, SIPFUNC_REMSIGNATURE, &szGuid[0]); fRet &= CryptUnregisterOIDFunction(0, SIPFUNC_CREATEINDIRECT, &szGuid[0]); fRet &= CryptUnregisterOIDFunction(0, SIPFUNC_VERIFYINDIRECT, &szGuid[0]); fRet &= CryptUnregisterOIDFunction(0, SIPFUNC_ISMYTYPE, &szGuid[0]); fRet &= CryptUnregisterOIDFunction(0, SIPFUNC_ISMYTYPE2, &szGuid[0]);
CommonReturn: return(fRet);
ErrorReturn: fRet = FALSE; goto CommonReturn;
TRACE_ERROR_EX(DBG_SS, GuidConvertFailed);
SET_ERROR_VAR_EX(DBG_SS, InvalidParam, ERROR_INVALID_PARAMETER); }
BOOL _RegisterSIPFunc(char *pszTag, char *pszGuid, WCHAR *pwszDll, WCHAR *pwszFunc) { char szFunc[REG_MAX_FUNC_NAME];
WideCharToMultiByte(0, 0, pwszFunc, -1, &szFunc[0], REG_MAX_FUNC_NAME, NULL, NULL);
return(CryptRegisterOIDFunction(0, pszTag, pszGuid, pwszDll, &szFunc[0])); }
|