windows-nt/Source/XPSP1/NT/ds/security/cryptoapi/pkitrust/wintrust/provider.cpp
2020-09-26 16:20:57 +08:00

142 lines
4.3 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: provider.cpp
//
// Contents: Microsoft Internet Security Trust Provider
//
// Functions: WintrustAddProvider
// WintrustRemoveProvider
//
// History: 30-May-1997 pberkman created
//
//--------------------------------------------------------------------------
#include "global.hxx"
#include "cryptreg.h"
static void inline MySetRegProvider(
GUID *pgActionID,
WCHAR *pwszRegKey,
WCHAR *pwszDLLName,
WCHAR *pwszFuncName,
BOOL *pfRet,
DWORD *pdwErr
)
{
BOOL fRet;
fRet = SetRegProvider(pgActionID, pwszRegKey, pwszDLLName, pwszFuncName);
if (!fRet && *pfRet) {
*pfRet = FALSE;
*pdwErr = GetLastError();
}
}
BOOL WINAPI WintrustAddActionID(IN GUID *pgActionID,
IN DWORD fdwFlags,
IN CRYPT_REGISTER_ACTIONID *psProvInfo)
{
if (!(psProvInfo) ||
!(WVT_IS_CBSTRUCT_GT_MEMBEROFFSET(CRYPT_REGISTER_ACTIONID, psProvInfo->cbStruct, sTestPolicyProvider)))
{
SetLastError(ERROR_INVALID_PARAMETER);
return(FALSE);
}
BOOL fRet;
DWORD dwErr;
fRet = TRUE;
dwErr = 0;
MySetRegProvider(pgActionID,
REG_INIT_PROVIDER_KEY,
psProvInfo->sInitProvider.pwszDLLName,
psProvInfo->sInitProvider.pwszFunctionName,
&fRet,
&dwErr);
MySetRegProvider(pgActionID,
REG_OBJTRUST_PROVIDER_KEY,
psProvInfo->sObjectProvider.pwszDLLName,
psProvInfo->sObjectProvider.pwszFunctionName,
&fRet,
&dwErr);
MySetRegProvider(pgActionID,
REG_SIGTRUST_PROVIDER_KEY,
psProvInfo->sSignatureProvider.pwszDLLName,
psProvInfo->sSignatureProvider.pwszFunctionName,
&fRet,
&dwErr);
MySetRegProvider(pgActionID,
REG_CERTTRUST_PROVIDER_KEY,
psProvInfo->sCertificateProvider.pwszDLLName,
psProvInfo->sCertificateProvider.pwszFunctionName,
&fRet,
&dwErr);
MySetRegProvider(pgActionID,
REG_CERTPOL_PROVIDER_KEY,
psProvInfo->sCertificatePolicyProvider.pwszDLLName,
psProvInfo->sCertificatePolicyProvider.pwszFunctionName,
&fRet,
&dwErr);
MySetRegProvider(pgActionID,
REG_FINALPOL_PROVIDER_KEY,
psProvInfo->sFinalPolicyProvider.pwszDLLName,
psProvInfo->sFinalPolicyProvider.pwszFunctionName,
&fRet,
&dwErr);
MySetRegProvider(pgActionID,
REG_TESTPOL_PROVIDER_KEY,
psProvInfo->sTestPolicyProvider.pwszDLLName,
psProvInfo->sTestPolicyProvider.pwszFunctionName,
&fRet,
&dwErr);
// this member was added 7/23/1997 pberkman
if (WVT_IS_CBSTRUCT_GT_MEMBEROFFSET(CRYPT_REGISTER_ACTIONID, psProvInfo->cbStruct, sCleanupProvider))
{
MySetRegProvider(pgActionID,
REG_CLEANUP_PROVIDER_KEY,
psProvInfo->sCleanupProvider.pwszDLLName,
psProvInfo->sCleanupProvider.pwszFunctionName,
&fRet,
&dwErr);
}
if (!fRet && (fdwFlags & WT_ADD_ACTION_ID_RET_RESULT_FLAG))
{
SetLastError(dwErr);
return FALSE;
} else {
return TRUE;
}
}
BOOL WINAPI WintrustRemoveActionID(IN GUID *pgActionID)
{
RemoveRegProvider(pgActionID, REG_INIT_PROVIDER_KEY);
RemoveRegProvider(pgActionID, REG_OBJTRUST_PROVIDER_KEY);
RemoveRegProvider(pgActionID, REG_SIGTRUST_PROVIDER_KEY);
RemoveRegProvider(pgActionID, REG_CERTTRUST_PROVIDER_KEY);
RemoveRegProvider(pgActionID, REG_CERTPOL_PROVIDER_KEY);
RemoveRegProvider(pgActionID, REG_FINALPOL_PROVIDER_KEY);
RemoveRegProvider(pgActionID, REG_TESTPOL_PROVIDER_KEY);
RemoveRegProvider(pgActionID, REG_CLEANUP_PROVIDER_KEY);
return(TRUE);
}