Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

167 lines
4.7 KiB

//+-------------------------------------------------------------------------
//
// 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]));
}