254 lines
5.2 KiB
C++
254 lines
5.2 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1999 - 1999
|
|
//
|
|
// File: prop2.cpp
|
|
//
|
|
// Contents: ICertAdmin2 & ICertRequest2 IDispatch helper functions
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#if defined(CCERTADMIN)
|
|
|
|
# define CAPropWrapper(IFAdmin, IFRequest, Method) IFAdmin##_##Method
|
|
# define ICertProp2 ICertAdmin2
|
|
# define szICertProp2 "ICertAdmin2"
|
|
|
|
#elif defined(CCERTREQUEST)
|
|
|
|
# define CAPropWrapper(IFAdmin, IFRequest, Method) IFRequest##_##Method
|
|
# define ICertProp2 ICertRequest2
|
|
# define szICertProp2 "ICertRequest2"
|
|
|
|
#else
|
|
# error -- CCERTADMIN or CCERTREQUEST must be defined
|
|
#endif
|
|
|
|
#define szInvokeICertProp2(szMethod) "Invoke(" szICertProp2 "::" szMethod ")"
|
|
|
|
|
|
HRESULT
|
|
CAPropWrapper(Admin2, Request2, GetCAProperty)(
|
|
IN DISPATCHINTERFACE *pdiProp,
|
|
IN WCHAR const *pwszConfig,
|
|
IN LONG PropId,
|
|
IN LONG PropIndex,
|
|
IN LONG PropType,
|
|
IN LONG Flags, // CR_OUT_*
|
|
OUT VOID *pPropertyValue)
|
|
{
|
|
HRESULT hr;
|
|
BSTR strConfig = NULL;
|
|
LONG RetType;
|
|
VARIANT varResult;
|
|
|
|
VariantInit(&varResult);
|
|
CSASSERT(NULL != pdiProp && NULL != pdiProp->pDispatchTable);
|
|
|
|
switch (PropType)
|
|
{
|
|
case PROPTYPE_BINARY:
|
|
case PROPTYPE_STRING:
|
|
RetType = VT_BSTR;
|
|
break;
|
|
|
|
case PROPTYPE_DATE:
|
|
RetType = VT_DATE;
|
|
break;
|
|
|
|
case PROPTYPE_LONG:
|
|
RetType = VT_I4;
|
|
break;
|
|
|
|
default:
|
|
hr = E_INVALIDARG;
|
|
_JumpError(hr, error, "PropType");
|
|
}
|
|
|
|
if (!ConvertWszToBstr(&strConfig, pwszConfig, -1))
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
_JumpError(hr, error, "ConvertWszToBstr");
|
|
}
|
|
|
|
if (NULL != pdiProp->pDispatch)
|
|
{
|
|
VARIANT avar[5];
|
|
|
|
avar[0].vt = VT_BSTR;
|
|
avar[0].bstrVal = strConfig;
|
|
|
|
avar[1].vt = VT_I4;
|
|
avar[1].lVal = PropId;
|
|
|
|
avar[2].vt = VT_I4;
|
|
avar[2].lVal = PropIndex;
|
|
|
|
avar[3].vt = VT_I4;
|
|
avar[3].lVal = PropType;
|
|
|
|
avar[4].vt = VT_I4;
|
|
avar[4].lVal = Flags;
|
|
|
|
hr = DispatchInvoke(
|
|
pdiProp,
|
|
CAPropWrapper(ADMIN2, REQUEST2, GETCAPROPERTY),
|
|
ARRAYSIZE(avar),
|
|
avar,
|
|
RetType,
|
|
pPropertyValue);
|
|
if (S_OK != hr)
|
|
{
|
|
DBGPRINT((
|
|
DBG_SS_CERTLIB,
|
|
"%hs: Config=%ws PropId=%x Index=%x Type=%x Flags=%x\n",
|
|
szInvokeICertProp2("GetCAProperty"),
|
|
pwszConfig,
|
|
PropId,
|
|
PropIndex,
|
|
PropType,
|
|
Flags));
|
|
}
|
|
_JumpIfError(hr, error, szInvokeICertProp2("GetCAProperty"));
|
|
}
|
|
else
|
|
{
|
|
hr = ((ICertProp2 *) pdiProp->pUnknown)->GetCAProperty(
|
|
strConfig,
|
|
PropId,
|
|
PropIndex,
|
|
PropType,
|
|
Flags,
|
|
&varResult);
|
|
_JumpIfError3(
|
|
hr,
|
|
error,
|
|
szICertProp2 "::GetCAProperty",
|
|
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
|
|
E_INVALIDARG);
|
|
|
|
hr = DispatchGetReturnValue(&varResult, RetType, pPropertyValue);
|
|
_JumpIfError(hr, error, "DispatchGetReturnValue");
|
|
}
|
|
|
|
error:
|
|
if (NULL != strConfig)
|
|
{
|
|
SysFreeString(strConfig);
|
|
}
|
|
VariantClear(&varResult);
|
|
return(hr);
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CAPropWrapper(Admin2, Request2, GetCAPropertyFlags)(
|
|
IN DISPATCHINTERFACE *pdiProp,
|
|
IN WCHAR const *pwszConfig,
|
|
IN LONG PropId,
|
|
OUT LONG *pPropFlags)
|
|
{
|
|
HRESULT hr;
|
|
BSTR strConfig = NULL;
|
|
|
|
CSASSERT(NULL != pdiProp && NULL != pdiProp->pDispatchTable);
|
|
|
|
if (!ConvertWszToBstr(&strConfig, pwszConfig, -1))
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
_JumpError(hr, error, "ConvertWszToBstr");
|
|
}
|
|
|
|
if (NULL != pdiProp->pDispatch)
|
|
{
|
|
VARIANT avar[2];
|
|
|
|
avar[0].vt = VT_BSTR;
|
|
avar[0].bstrVal = strConfig;
|
|
|
|
avar[1].vt = VT_I4;
|
|
avar[1].lVal = PropId;
|
|
|
|
hr = DispatchInvoke(
|
|
pdiProp,
|
|
CAPropWrapper(ADMIN2, REQUEST2, GETCAPROPERTYFLAGS),
|
|
ARRAYSIZE(avar),
|
|
avar,
|
|
VT_I4,
|
|
pPropFlags);
|
|
_JumpIfError(hr, error, szInvokeICertProp2("GetCAPropertyFlags"));
|
|
}
|
|
else
|
|
{
|
|
hr = ((ICertProp2 *) pdiProp->pUnknown)->GetCAPropertyFlags(
|
|
strConfig,
|
|
PropId,
|
|
pPropFlags);
|
|
_JumpIfError(hr, error, szICertProp2 "::GetCAPropertyFlags");
|
|
}
|
|
|
|
error:
|
|
if (NULL != strConfig)
|
|
{
|
|
SysFreeString(strConfig);
|
|
}
|
|
return(hr);
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CAPropWrapper(Admin2, Request2, GetCAPropertyDisplayName)(
|
|
IN DISPATCHINTERFACE *pdiProp,
|
|
IN WCHAR const *pwszConfig,
|
|
IN LONG PropId,
|
|
OUT BSTR *pstrDisplayName)
|
|
{
|
|
HRESULT hr;
|
|
BSTR strConfig = NULL;
|
|
|
|
CSASSERT(NULL != pdiProp && NULL != pdiProp->pDispatchTable);
|
|
|
|
if (!ConvertWszToBstr(&strConfig, pwszConfig, -1))
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
_JumpError(hr, error, "ConvertWszToBstr");
|
|
}
|
|
|
|
if (NULL != pdiProp->pDispatch)
|
|
{
|
|
VARIANT avar[2];
|
|
|
|
avar[0].vt = VT_BSTR;
|
|
avar[0].bstrVal = strConfig;
|
|
|
|
avar[1].vt = VT_I4;
|
|
avar[1].lVal = PropId;
|
|
|
|
hr = DispatchInvoke(
|
|
pdiProp,
|
|
CAPropWrapper(ADMIN2, REQUEST2, GETCAPROPERTYDISPLAYNAME),
|
|
ARRAYSIZE(avar),
|
|
avar,
|
|
VT_BSTR,
|
|
pstrDisplayName);
|
|
_JumpIfError(hr, error, szInvokeICertProp2("GetCAPropertyDisplayName"));
|
|
}
|
|
else
|
|
{
|
|
hr = ((ICertProp2 *) pdiProp->pUnknown)->GetCAPropertyDisplayName(
|
|
strConfig,
|
|
PropId,
|
|
pstrDisplayName);
|
|
_JumpIfError(hr, error, szICertProp2 "::GetCAPropertyDisplayName");
|
|
}
|
|
|
|
error:
|
|
if (NULL != strConfig)
|
|
{
|
|
SysFreeString(strConfig);
|
|
}
|
|
return(hr);
|
|
}
|