|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1999 - 1999
//
// File: certif.cpp
//
//--------------------------------------------------------------------------
#include "stdafx.h"
#include "csprop.h"
#include "ciinit.h"
#define __dwFILE__ __dwFILE_CERTMMC_CERTIF_CPP__
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 == LSTRCMPIS(pwszPropertyName, wszPROPCATYPE)) { ENUM_CATYPES caType = g_pCA->GetCAType(); hr = myUnmarshalVariant( Flags, sizeof(DWORD), (PBYTE)&caType, pvarPropertyValue); _JumpIfError(hr, error, "myUnmarshalVariant"); } else if (0 == LSTRCMPIS(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; }
|