Implementing ISceSvcAttachmentPersistInfo
Attachment snap-in extensions must implement the ISceSvcAttachmentPersistInfo interface. The Security Configuration snap-ins query this interface periodically, such as when saving the configuration or closing the snap-in. This allows the snap-in extension to save any modifications that the user may have made to the inspection database or to the associated configuration.
The following example shows one way to implement ISceSvcAttachmentPersistInfo.
#include <windows.h>
class CSceSvcAttachmentPersistInfo:
public ISceSvcAttachmentPersistInfo,
public CComObjectRoot
{
BEGIN_COM_MAP(CSceSvcAttachmentPersistInfo)
COM_INTERFACE_ENTRY(ISceSvcAttachmentPersistInfo)
END_COM_MAP()
friend class CDataObject;
friend class CComponentDataImpl;
CSceSvcAttachmentPersistInfo();
~CSceSvcAttachmentPersistInfo();
public:
// ISceSvcAttachmentPersistInfo interface members
STDMETHOD(IsDirty)(LPTSTR lpTemplateName);
STDMETHOD(Save)(LPTSTR lpTemplateName, SCESVC_HANDLE *pscesvcHandle,
PVOID *ppvData, PBOOL pbOverwriteAll );
STDMETHOD(FreeBuffer)(PVOID pvData);
//...
};
//
// Implementing IsDirty
//
STDMETHODIMP CSceSvcAttachmentPersistInfo::IsDirty(LPTSTR lpTemplateName)
{
if ( m_pSnapin == NULL )
{
return S_FALSE;
}
//
// just calling the snap-in's main IsDirty
//
return m_pSnapin->IsDirty();
}
//
// Implementing Save
//
STDMETHODIMP CSceSvcAttachmentPersistInfo::Save(LPTSTR lpTemplateName,
SCE_HANDLE *psceHandle,
PVOID *ppvData,
PBOOL pbOverwriteAll )
{
if ( psceHandle == NULL || ppvData == NULL ||
pbOverwriteAll == NULL )
{
return E_INVALIDARG;
}
if ( m_pSnapin != NULL )
{
m_pSnapin->SaveDataInBuffer(lpTemplateName, psceHandle,
ppvData, pbOverwriteAll);
*psceHandle = m_sceHandle;
}
return S_OK;
}
//
// Implementing FreeBuffer
//
STDMETHODIMP CSceSvcAttachmentPersistInfo::FreeBuffer(PVOID pvData)
{
if ( pvData == NULL )
{
return S_OK;
}
PSCESVC_ANALYSIS_INFO pTempInfo=(PSCESVC_ANALYSIS_INFO)pvData;
if ( pTempInfo->Lines != NULL )
{
for ( DWORD i=0; i < pTempInfo->Count; i++ )
{
if ( pTempInfo->Lines[i].Key != NULL )
LocalFree(pTempInfo->Lines[i].Key);
if ( pTempInfo->Lines[i].Value != NULL )
LocalFree(pTempInfo->Lines[i].Value);
}
LocalFree( pTempInfo->Lines);
}
LocalFree(pTempInfo);
return S_OK;
}
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for