//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: log.cpp // // Contents: implements policy and exit module logging routines. // //-------------------------------------------------------------------------- #include #pragma hdrstop #include "csdisp.h" BOOL LogModuleStatus( IN HMODULE hModule, IN DWORD dwLogID, // Resource ID of log string IN BOOL fPolicy, IN WCHAR const *pwszSource, IN WCHAR const * const *ppwszInsert) // array of insert strings { HRESULT hr = S_OK; BOOL fResult = FALSE; WCHAR *pwszResult = NULL; ICreateErrorInfo *pCreateErrorInfo = NULL; IErrorInfo *pErrorInfo = NULL; if (0 == FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_FROM_HMODULE, hModule, dwLogID, 0, (WCHAR *) &pwszResult, 0, (va_list *) ppwszInsert)) { goto error; } DBGPRINT((DBG_SS_CERTPOL, "LogPolicyStatus: %ws\n", pwszResult)); hr = CreateErrorInfo(&pCreateErrorInfo); _JumpIfError(hr, error, "CreateErrorInfo"); hr = pCreateErrorInfo->SetGUID(fPolicy? IID_ICertPolicy : IID_ICertExit); _PrintIfError(hr, "SetGUID"); hr = pCreateErrorInfo->SetDescription(pwszResult); _PrintIfError(hr, "SetDescription"); // Set ProgId: hr = pCreateErrorInfo->SetSource(const_cast(pwszSource)); _PrintIfError(hr, "SetSource"); hr = pCreateErrorInfo->QueryInterface( IID_IErrorInfo, (VOID **) &pErrorInfo); _JumpIfError(hr, error, "QueryInterface"); SetErrorInfo(0, pErrorInfo); fResult = TRUE; error: if (NULL != pwszResult) { LocalFree(pwszResult); } if (NULL != pErrorInfo) { pErrorInfo->Release(); } if (NULL != pCreateErrorInfo) { pCreateErrorInfo->Release(); } return(fResult); } HRESULT LogPolicyEvent( IN HMODULE hModule, IN DWORD dwLogID, // Resource ID of log string IN ICertServerPolicy *pServer, IN WCHAR const *pwszPropEvent, IN WCHAR const * const *ppwszInsert) // array of insert strings { HRESULT hr; WCHAR *pwszValue = NULL; BSTR strName = NULL; VARIANT varValue; if (0 == FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_ARGUMENT_ARRAY | FORMAT_MESSAGE_FROM_HMODULE, hModule, dwLogID, 0, (WCHAR *) &pwszValue, 0, (va_list *) ppwszInsert)) { hr = myHLastError(); _JumpError(hr, error, "FormatMessage"); } DBGPRINT((DBG_SS_CERTPOL, "LogPolicyEvent: %ws\n", pwszValue)); varValue.vt = VT_EMPTY; if (!myConvertWszToBstr(&strName, pwszPropEvent, -1)) { hr = E_OUTOFMEMORY; _JumpError(hr, error, "myConvertWszToBstr"); } varValue.bstrVal = NULL; if (!myConvertWszToBstr(&varValue.bstrVal, pwszValue, -1)) { hr = E_OUTOFMEMORY; _JumpError(hr, error, "myConvertWszToBstr"); } varValue.vt = VT_BSTR; hr = pServer->SetCertificateProperty(strName, PROPTYPE_STRING, &varValue); _JumpIfError(hr, error, "SetCertificateProperty"); error: VariantClear(&varValue); if (NULL != strName) { SysFreeString(strName); } if (NULL != pwszValue) { LocalFree(pwszValue); } return(hr); }