Source code of Windows XP (NT5)
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.
|
|
/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
NOTSINK.CPP
Abstract:
History:
--*/
#include "precomp.h"
#include "notsink.h"
#include <stdio.h>
#include "wbemntfy.h"
extern CStatusMonitor gStatus;
// Notification Query Sink
SCODE CNotSink::QueryInterface( REFIID riid, LPVOID * ppvObj ) { if (riid == IID_IUnknown) { *ppvObj = this; } else if (riid == IID_IWbemObjectSink) *ppvObj = this; else { *ppvObj = NULL; return E_NOINTERFACE; }
AddRef(); return NOERROR; }
ULONG CNotSink::AddRef() { InterlockedIncrement(&m_lRefCount); return (ULONG) m_lRefCount; }
ULONG CNotSink::Release() { InterlockedDecrement(&m_lRefCount);
if (0 != m_lRefCount) { return 1; }
delete this; return 0; }
SCODE CNotSink::Indicate( long lObjectCount, IWbemClassObject ** pObjArray ) { if(lObjectCount == 0) return WBEM_NO_ERROR; if(m_pViewer == NULL) return WBEM_NO_ERROR;
// Use critical section to prevent re-entrancy
// from additional Indicate's into this code.
EnterCriticalSection(&m_cs); for (int i = 0; i < lObjectCount; i++) { IWbemClassObject *pObj = pObjArray[i]; m_pViewer->PostObject(pObj); } m_pViewer->PostCount(lObjectCount); LeaveCriticalSection(&m_cs);
return WBEM_NO_ERROR; }
STDMETHODIMP CNotSink::SetStatus(long lFlags, long lParam, BSTR strParam, IWbemClassObject* pObjParam) { if(lFlags & WBEM_STATUS_PROGRESS) { gStatus.Add(lFlags, lParam, strParam); return WBEM_NO_ERROR; }
EnterCriticalSection(&m_cs); if(m_pViewer) m_pViewer->PostComplete(lParam, strParam, pObjParam); LeaveCriticalSection(&m_cs); return WBEM_S_NO_ERROR; }
CNotSink::CNotSink(CQueryResultDlg* pViewer) { m_lRefCount = 1; m_pViewer = pViewer; InitializeCriticalSection(&m_cs); }
CNotSink::~CNotSink() { DeleteCriticalSection(&m_cs); }
|