mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
864 lines
14 KiB
864 lines
14 KiB
/*++
|
|
|
|
© 1998 Seagate Software, Inc. All rights reserved
|
|
|
|
Module Name:
|
|
|
|
RmsObjct.cpp
|
|
|
|
Abstract:
|
|
|
|
Implementation of CRmsComObject
|
|
|
|
Author:
|
|
|
|
Brian Dodd [brian] 15-Nov-1996
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "RmsObjct.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
|
|
|
|
CRmsComObject::CRmsComObject(void)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
CRmsComObject constructor
|
|
|
|
Arguments:
|
|
|
|
None
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
{
|
|
// Default values
|
|
(void) CoCreateGuid( &m_objectId );
|
|
|
|
m_ObjectType = RmsObjectUnknown;
|
|
m_IsEnabled = TRUE;
|
|
m_State = 0;
|
|
m_StatusCode = S_OK;
|
|
m_Name = OLESTR("Object");
|
|
m_Description = OLESTR("");
|
|
|
|
memset( &m_Permit, 0, sizeof( SECURITY_DESCRIPTOR ) );
|
|
|
|
m_findBy = RmsFindByUnknown;
|
|
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CRmsComObject::CompareTo(
|
|
IN IUnknown *pCollectable,
|
|
OUT SHORT *pResult)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
CRmsComObject::CompareTo
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
SHORT result = 1;
|
|
|
|
WsbTraceIn( OLESTR("CRmsComObject::CompareTo"), OLESTR("") );
|
|
|
|
try {
|
|
|
|
// Validate arguments - Okay if pResult is NULL
|
|
WsbAssertPointer( pCollectable );
|
|
|
|
// We need the IRmsComObject interface to get the value of the object.
|
|
CComQIPtr<IRmsComObject, &IID_IRmsComObject> pObject = pCollectable;
|
|
WsbAssertPointer( pObject );
|
|
|
|
switch ( m_findBy ) {
|
|
|
|
case RmsFindByObjectId:
|
|
default:
|
|
{
|
|
GUID objectId;
|
|
|
|
// Get objectId.
|
|
WsbAffirmHr( pObject->GetObjectId( &objectId ));
|
|
|
|
if ( m_objectId == objectId ) {
|
|
|
|
// Object IDs match
|
|
hr = S_OK;
|
|
result = 0;
|
|
|
|
}
|
|
else {
|
|
hr = S_FALSE;
|
|
result = 1;
|
|
}
|
|
}
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
WsbCatch( hr );
|
|
|
|
if ( SUCCEEDED(hr) && (0 != pResult) ){
|
|
*pResult = result;
|
|
}
|
|
|
|
WsbTraceOut( OLESTR("CRmsComObject::CompareTo"),
|
|
OLESTR("hr = <%ls>, result = <%ls>"),
|
|
WsbHrAsString( hr ), WsbPtrToShortAsString( pResult ) );
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CRmsComObject::GetSizeMax(
|
|
OUT ULARGE_INTEGER* pcbSize)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IPersistStream::GetSizeMax
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = E_NOTIMPL;
|
|
|
|
WsbTraceIn(OLESTR("CRmsComObject::GetSizeMax"), OLESTR(""));
|
|
|
|
// try {
|
|
// WsbAssert(0 != pcbSize, E_POINTER);
|
|
|
|
// // Get max size
|
|
// pcbSize->QuadPart = WsbPersistSizeOf(GUID) + // m_objectId
|
|
// WsbPersistSizeOf(LONG) + // m_findBy
|
|
// WsbPersistSizeOf(LONG) + // m_state
|
|
// WsbPersistSizeOf(HRESULT); // m_errCode
|
|
|
|
//// WsbPersistSizeOf(SECURITY_DESCRIPTOR); // m_permit
|
|
|
|
// } WsbCatch(hr);
|
|
|
|
WsbTraceOut(OLESTR("CRmsComObject::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pcbSize));
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CRmsComObject::Load(
|
|
IN IStream* pStream)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IPersistStream::Load
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
WsbTraceIn(OLESTR("CRmsComObject::Load"), OLESTR(""));
|
|
|
|
try {
|
|
WsbAssertPointer( pStream );
|
|
|
|
USHORT usTemp;
|
|
ULONG ulTemp;
|
|
|
|
// Read value
|
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_objectId));
|
|
|
|
WsbAffirmHr(WsbLoadFromStream(pStream, &usTemp));
|
|
m_ObjectType = (RmsObject)usTemp;
|
|
|
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_IsEnabled));
|
|
WsbAffirmHr(WsbLoadFromStream(pStream, &m_State));
|
|
WsbAffirmHr(WsbLoadFromStream(pStream, &ulTemp));
|
|
m_StatusCode = (HRESULT)ulTemp;
|
|
|
|
m_Name.Free(); // Clean out any thing previously held
|
|
WsbAffirmHr(WsbBstrFromStream(pStream, &m_Name));
|
|
m_Description.Free();
|
|
WsbAffirmHr(WsbBstrFromStream(pStream, &m_Description));
|
|
|
|
// WsbAffirmHr(WsbLoadFromStream(pStream, &m_permit));
|
|
|
|
WsbAffirmHr(WsbLoadFromStream(pStream, &usTemp));
|
|
m_findBy = (RmsFindBy)usTemp;
|
|
|
|
} WsbCatch(hr);
|
|
|
|
|
|
WsbTraceOut(OLESTR("CRmsComObject::Load"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CRmsComObject::Save(
|
|
IN IStream* pStream,
|
|
IN BOOL clearDirty)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IPersistStream::Save
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
ULONG ulBytes = 0;
|
|
|
|
WsbTraceIn(OLESTR("CRmsComObject::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
|
|
|
|
try {
|
|
WsbAssertPointer( pStream );
|
|
|
|
// Read value
|
|
WsbAffirmHr(WsbSaveToStream(pStream, m_objectId));
|
|
WsbAffirmHr(WsbSaveToStream(pStream, (USHORT) m_ObjectType));
|
|
WsbAffirmHr(WsbSaveToStream(pStream, m_IsEnabled));
|
|
WsbAffirmHr(WsbSaveToStream(pStream, m_State));
|
|
WsbAffirmHr(WsbSaveToStream(pStream, (ULONG) m_StatusCode));
|
|
WsbAffirmHr(WsbBstrToStream(pStream, m_Name));
|
|
WsbAffirmHr(WsbBstrToStream(pStream, m_Description));
|
|
|
|
// WsbAffirmHr(WsbSaveToStream(pStream, m_permit));
|
|
|
|
WsbAffirmHr(WsbSaveToStream(pStream, (USHORT) m_findBy));
|
|
|
|
} WsbCatch(hr);
|
|
|
|
|
|
WsbTraceOut(OLESTR("CRmsComObject::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CRmsComObject::Test(
|
|
OUT USHORT *pPassed,
|
|
OUT USHORT *pFailed)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IWsbTestable::Test
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
CComPtr<IRmsMediaSet> pMediaSet1;
|
|
CComPtr<IRmsMediaSet> pMediaSet2;
|
|
|
|
CComPtr<IPersistFile> pFile1;
|
|
CComPtr<IPersistFile> pFile2;
|
|
|
|
LONG i;
|
|
|
|
LONG longWork1;
|
|
LONG longWork2;
|
|
|
|
HRESULT hresultVal1 = 11111111;
|
|
HRESULT hresultWork1;
|
|
|
|
// SECURITY_DESCRIPTOR permitVal1;
|
|
// SECURITY_DESCRIPTOR permitWork1;
|
|
|
|
|
|
WsbTraceIn(OLESTR("CRmsComObject::Test"), OLESTR(""));
|
|
|
|
try {
|
|
// Get the MediaSet interface.
|
|
hr = S_OK;
|
|
try {
|
|
WsbAssertHr(((IUnknown*) (IRmsMediaSet*) this)->QueryInterface(IID_IRmsMediaSet, (void**) &pMediaSet1));
|
|
|
|
// Test SetState & GetState
|
|
for (i = RmsStateUnknown; i < RmsStateError; i++){
|
|
|
|
longWork1 = i;
|
|
|
|
SetState (longWork1);
|
|
|
|
GetState (&longWork2);
|
|
|
|
if (longWork1 == longWork2){
|
|
(*pPassed)++;
|
|
} else {
|
|
(*pFailed)++;
|
|
}
|
|
}
|
|
|
|
// Test GetErrCode
|
|
m_StatusCode = hresultVal1;
|
|
|
|
GetStatusCode(&hresultWork1);
|
|
|
|
if(hresultVal1 == hresultWork1){
|
|
(*pPassed)++;
|
|
} else {
|
|
(*pFailed)++;
|
|
}
|
|
|
|
// Test SetPermissions & GetPermissions
|
|
// SetPermissions(permitVal1);
|
|
|
|
// GetPermissions(&permitWork1);
|
|
|
|
// if((permitVal1 == permitWork1)){
|
|
// (*pPassed)++;
|
|
// } else {
|
|
// (*pFailed)++;
|
|
// }
|
|
|
|
} WsbCatch(hr);
|
|
|
|
// Tally up the results
|
|
|
|
hr = S_OK;
|
|
|
|
if (*pFailed) {
|
|
hr = S_FALSE;
|
|
}
|
|
|
|
} WsbCatch(hr);
|
|
|
|
WsbTraceOut(OLESTR("CRmsComObject::Test"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::InterfaceSupportsErrorInfo(
|
|
IN REFIID riid)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
ISupportsErrorInfo::InterfaceSupportsErrorInfo
|
|
|
|
--*/
|
|
{
|
|
static const IID* arr[] =
|
|
{
|
|
&IID_IRmsServer,
|
|
&IID_IRmsLibrary,
|
|
&IID_IRmsDriveClass,
|
|
&IID_IRmsCartridge,
|
|
&IID_IRmsDrive,
|
|
&IID_IRmsStorageSlot,
|
|
&IID_IRmsMediumChanger,
|
|
&IID_IRmsIEPort,
|
|
&IID_IRmsMediaSet,
|
|
&IID_IRmsRequest,
|
|
&IID_IRmsPartition,
|
|
&IID_IRmsComObject,
|
|
&IID_IRmsChangerElement,
|
|
&IID_IRmsDevice,
|
|
&IID_IRmsStorageInfo,
|
|
&IID_IRmsNTMS,
|
|
};
|
|
|
|
for (int i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
|
|
{
|
|
if (InlineIsEqualGUID(*arr[i],riid))
|
|
return S_OK;
|
|
}
|
|
return S_FALSE;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::GetObjectId(
|
|
OUT GUID *pObjectId)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetObjectId
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
WsbAssertPointer( pObjectId );
|
|
|
|
*pObjectId = m_objectId;
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::SetObjectId(
|
|
IN GUID objectId)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::SetObjectId
|
|
|
|
--*/
|
|
{
|
|
m_objectId = objectId;
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::GetObjectType(
|
|
OUT LONG *pType)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetObjectType
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
WsbAssertPointer( pType );
|
|
|
|
*pType = m_ObjectType;
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::SetObjectType(
|
|
IN LONG type)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::SetObjectType
|
|
|
|
--*/
|
|
{
|
|
m_ObjectType = (RmsObject) type;
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::IsEnabled(void)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::IsEnabled
|
|
|
|
--*/
|
|
{
|
|
return (m_IsEnabled) ? S_OK : S_FALSE;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::Enable()
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::Enable
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
m_IsEnabled = TRUE;
|
|
WsbAffirmHr(SetStatusCode(S_OK));
|
|
|
|
// Log an Event
|
|
WsbLogEvent(RMS_MESSAGE_OBJECT_ENABLED, 0, NULL, (WCHAR *)m_Name, NULL );
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::Disable(
|
|
IN HRESULT reason)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::Disable
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
m_IsEnabled = FALSE;
|
|
WsbAffirmHr(SetStatusCode(reason));
|
|
|
|
// Log an Event
|
|
WsbLogEvent(RMS_MESSAGE_OBJECT_DISABLED, 0, NULL, (WCHAR *)m_Name, WsbHrAsString(reason), NULL );
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::GetState(
|
|
OUT LONG *pState)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetState
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
WsbAssertPointer( pState );
|
|
|
|
*pState = m_State;
|
|
WsbTrace(OLESTR("GetState: Object <0x%08x> - Enabled = <%ls>; State = <%d>; StatusCode = <%ls>.\n"),
|
|
this, WsbBoolAsString(m_IsEnabled), m_State, WsbHrAsString(m_StatusCode));
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::SetState(
|
|
IN LONG state)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::SetState
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
m_State = state;
|
|
WsbAffirmHr(SetStatusCode(S_OK));
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::GetStatusCode(
|
|
OUT HRESULT *pResult)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetStatusCode
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
WsbAssertPointer( pResult );
|
|
|
|
*pResult = m_StatusCode;
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::SetStatusCode(
|
|
IN HRESULT result
|
|
)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::SetStatusCode
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
m_StatusCode = result;
|
|
WsbAffirmHr(adviseOfStatusChange());
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::GetName(
|
|
OUT BSTR *pName)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetName
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
WsbAssertPointer( pName );
|
|
|
|
WsbAffirmHr( m_Name.CopyToBstr(pName) );
|
|
|
|
} WsbCatch( hr );
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::SetName(
|
|
IN BSTR name)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::SetName
|
|
|
|
--*/
|
|
{
|
|
m_Name = name;
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::GetDescription(
|
|
OUT BSTR *pDesc)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetDescription
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
WsbAssertPointer( pDesc );
|
|
|
|
WsbAffirmHr( m_Name.CopyToBstr(pDesc) );
|
|
|
|
} WsbCatch( hr );
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::SetDescription(
|
|
IN BSTR desc)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::SetDescription
|
|
|
|
--*/
|
|
{
|
|
m_Description = desc;
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::GetPermissions(
|
|
OUT SECURITY_DESCRIPTOR *lpPermit)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetPermissions
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
WsbAssertPointer( lpPermit );
|
|
|
|
*lpPermit = m_Permit;
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::SetPermissions(
|
|
IN SECURITY_DESCRIPTOR permit)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetPermissions
|
|
|
|
--*/
|
|
{
|
|
|
|
m_Permit = permit;
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::GetFindBy(
|
|
OUT LONG *pFindBy)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::GetFindBy
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
try {
|
|
|
|
WsbAssertPointer( pFindBy );
|
|
|
|
*pFindBy = m_findBy;
|
|
|
|
} WsbCatch(hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CRmsComObject::SetFindBy(
|
|
IN LONG findBy)
|
|
/*++
|
|
|
|
Implements:
|
|
|
|
IRmsComObject::SetFindBy
|
|
|
|
--*/
|
|
{
|
|
m_findBy = (RmsFindBy) findBy;
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CRmsComObject::adviseOfStatusChange(void)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Notifies of object state changes.
|
|
|
|
Arguments:
|
|
|
|
None
|
|
|
|
Return Value:
|
|
|
|
S_OK - Success.
|
|
|
|
--*/
|
|
{
|
|
HRESULT hr = S_OK;
|
|
WsbTraceIn( OLESTR("CRmsComObject::adviseOfStatusChange"), OLESTR(""));
|
|
|
|
try {
|
|
CONNECTDATA pConnectData;
|
|
CComPtr<IConnectionPoint> pCP;
|
|
CComPtr<IConnectionPointContainer> pCPC;
|
|
CComPtr<IEnumConnections> pConnection;
|
|
CComPtr<IRmsSinkEveryEvent> pSink;
|
|
|
|
WsbTrace(OLESTR("Object <0x%08x> - Enabled = <%ls>; State = <%d>; StatusCode = <%ls>.\n"),
|
|
this, WsbBoolAsString(m_IsEnabled), m_State, WsbHrAsString(m_StatusCode));
|
|
|
|
// Tell everyone the new state of the object.
|
|
WsbAffirmHr(((IUnknown*)(IRmsComObject*) this)->QueryInterface(IID_IConnectionPointContainer, (void**) &pCPC));
|
|
WsbAffirmHr(pCPC->FindConnectionPoint(IID_IRmsSinkEveryEvent, &pCP));
|
|
WsbAffirmHr(pCP->EnumConnections(&pConnection));
|
|
|
|
while(pConnection->Next(1, &pConnectData, 0) == S_OK) {
|
|
|
|
try {
|
|
WsbAffirmHr((pConnectData.pUnk)->QueryInterface(IID_IRmsSinkEveryEvent, (void**) &pSink));
|
|
WsbAffirmHr(pSink->ProcessObjectStatusChange( m_IsEnabled, m_State, m_StatusCode ));
|
|
} WsbCatch(hr);
|
|
|
|
(pConnectData.pUnk)->Release();
|
|
pSink=0;
|
|
}
|
|
|
|
} WsbCatch(hr);
|
|
|
|
// We don't care if the sink has problems!
|
|
hr = S_OK;
|
|
|
|
WsbTraceOut(OLESTR("CRmsComObject::adviseOfStatusChange"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
|
|
|
return hr;
|
|
}
|