windows-nt/Source/XPSP1/NT/ds/security/services/ca/certmmc/certif.cpp
2020-09-26 16:20:57 +08:00

182 lines
3.6 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1999 - 1999
//
// File: certif.cpp
//
//--------------------------------------------------------------------------
#include "stdafx.h"
#include "csprop.h"
#include "ciinit.h"
FNCIGETPROPERTY PropCIGetProperty;
FNCISETPROPERTY PropCISetProperty;
FNCIGETEXTENSION PropCIGetExtension;
FNCISETPROPERTY PropCISetExtension;
FNCIENUMSETUP PropCIEnumSetup;
FNCIENUMNEXT PropCIEnumNext;
FNCIENUMCLOSE PropCIEnumClose;
SERVERCALLBACKS ThunkedCallbacks =
{
PropCIGetProperty, // FNCIGETPROPERTY *pfnGetProperty;
PropCISetProperty, // FNCISETPROPERTY *pfnSetProperty;
PropCIGetExtension, // FNCIGETEXTENSION *pfnGetExtension;
PropCISetExtension, // FNCISETEXTENSION *pfnSetExtension;
PropCIEnumSetup, // FNCIENUMSETUP *pfnEnumSetup;
PropCIEnumNext, // FNCIENUMNEXT *pfnEnumNext;
PropCIEnumClose, // FNCIENUMCLOSE *pfnEnumClose;
};
CertSvrCA* g_pCA = NULL;
HRESULT ThunkServerCallbacks(CertSvrCA* pCA)
{
HRESULT hr = S_OK;
static BOOL fInitialized = FALSE;
if (!fInitialized)
{
fInitialized = TRUE;
// initialize certif.dll
hr = CertificateInterfaceInit(
&ThunkedCallbacks,
sizeof(ThunkedCallbacks));
}
g_pCA = pCA;
return hr;
}
HRESULT
PropCIGetProperty(
IN LONG Context,
IN DWORD Flags,
IN WCHAR const *pwszPropertyName,
OUT VARIANT *pvarPropertyValue)
{
HRESULT hr;
if (NULL != pvarPropertyValue)
{
VariantInit(pvarPropertyValue);
}
if (NULL == pwszPropertyName || NULL == pvarPropertyValue)
{
hr = E_POINTER;
_JumpError(hr, error, "NULL parm");
}
hr = E_INVALIDARG;
if ((PROPCALLER_MASK & Flags) != PROPCALLER_POLICY &&
(PROPCALLER_MASK & Flags) != PROPCALLER_EXIT)
{
_JumpError(hr, error, "Flags: Invalid caller");
}
// Special, hard-coded properties we need to support
if (0 == lstrcmpi(pwszPropertyName, wszPROPCATYPE))
{
ENUM_CATYPES caType = g_pCA->GetCAType();
hr = myUnmarshalVariant(
Flags,
sizeof(DWORD),
(PBYTE)&caType,
pvarPropertyValue);
_JumpIfError(hr, error, "myUnmarshalVariant");
}
else if (0 == lstrcmpi(pwszPropertyName, wszPROPUSEDS))
{
BOOL fUseDS = g_pCA->FIsUsingDS();
hr = myUnmarshalVariant(
Flags,
sizeof(BOOL),
(PBYTE)&fUseDS,
pvarPropertyValue);
_JumpIfError(hr, error, "myUnmarshalVariant");
}
else
{
hr = CERTSRV_E_PROPERTY_EMPTY;
}
error:
return(myHError(hr));
}
HRESULT
PropCISetProperty(
IN LONG Context,
IN DWORD Flags,
IN WCHAR const *pwszPropertyName,
IN VARIANT const *pvarPropertyValue)
{
return E_NOTIMPL;
}
HRESULT
PropCIGetExtension(
IN LONG Context,
IN DWORD Flags,
IN WCHAR const *pwszExtensionName,
OUT DWORD *pdwExtFlags,
OUT VARIANT *pvarValue)
{
return E_NOTIMPL;
}
HRESULT
PropCISetExtension(
IN LONG Context,
IN DWORD Flags,
IN WCHAR const *pwszExtensionName,
IN DWORD ExtFlags,
IN VARIANT const *pvarValue)
{
return E_NOTIMPL;
}
HRESULT
PropCIEnumSetup(
IN LONG Context,
IN LONG Flags,
IN OUT CIENUM *pciEnum)
{
return E_NOTIMPL;
}
HRESULT PropCIEnumNext(
IN OUT CIENUM *pciEnum,
OUT BSTR *pstrPropertyName)
{
return E_NOTIMPL;
}
HRESULT PropCIEnumClose(
IN OUT CIENUM *pciEnum)
{
return E_NOTIMPL;
}