Leaked source code of windows server 2003
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.
 
 
 
 
 
 

175 lines
4.2 KiB

/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORP., 1998
*
* TITLE: CallBack.Cpp
*
* VERSION: 2.0
*
* AUTHOR: ReedB
*
* DATE: 4 Aug, 1998
*
* DESCRIPTION:
* Implementation of event callbacks for the WIA device class driver.
*
*******************************************************************************/
#include "precomp.h"
#include "stiexe.h"
#include "wiamindr.h"
#include "callback.h"
// Debugging interface, has DLL lifetime. Maintained by USD.
/*******************************************************************************
*
* QueryInterface
* AddRef
* Release
*
* DESCRIPTION:
* CEventCallback IUnknown Interface.
*
* PARAMETERS:
*
*******************************************************************************/
HRESULT _stdcall CEventCallback::QueryInterface(const IID& iid, void** ppv)
{
*ppv = NULL;
if (iid == IID_IUnknown || iid == IID_IWiaEventCallback) {
*ppv = (IWiaEventCallback*) this;
}
else {
return E_NOINTERFACE;
}
AddRef();
return S_OK;
}
ULONG _stdcall CEventCallback::AddRef()
{
InterlockedIncrement((long*) &m_cRef);
return m_cRef;
}
ULONG _stdcall CEventCallback::Release()
{
ULONG ulRefCount = m_cRef - 1;
if (InterlockedDecrement((long*) &m_cRef) == 0) {
delete this;
return 0;
}
return ulRefCount;
}
/*******************************************************************************
*
* CEventCallback
* Initialize
* ~CEventCallback
*
* DESCRIPTION:
* CEventCallback Constructor/Initialize/Destructor Methods.
*
* PARAMETERS:
*
*******************************************************************************/
CEventCallback::CEventCallback()
{
m_cRef = 0;
}
HRESULT _stdcall CEventCallback::Initialize()
{
return S_OK;
}
CEventCallback::~CEventCallback()
{
}
/*******************************************************************************
*
* ImageEventCallback
*
* DESCRIPTION:
* Handles WIA events.
*
* PARAMETERS:
*
*******************************************************************************/
HRESULT _stdcall CEventCallback::ImageEventCallback(
const GUID *pEventGUID,
BSTR bstrEventDescription,
BSTR bstrDeviceID,
BSTR bstrDeviceDescription,
DWORD dwDeviceType,
BSTR bstrFullItemName,
ULONG *plEventType,
ULONG ulReserved)
{
// Update properties in response to WIA events.
return S_OK;
}
/*******************************************************************************
*
* RegisterForWIAEvents
*
* DESCRIPTION:
* Handles WIA events.
*
* PARAMETERS:
*
*******************************************************************************/
HRESULT RegisterForWIAEvents(IWiaEventCallback** ppIWiaEventCallback)
{
DBG_FN(::RegisterForWIAEvents);
HRESULT hr;
IWiaDevMgr *pIWiaDevMgr;
// Get a WIA device manager object.
hr = CoCreateInstance(CLSID_WiaDevMgr,
NULL,
CLSCTX_LOCAL_SERVER,
IID_IWiaDevMgr,
(void**)&pIWiaDevMgr);
if (SUCCEEDED(hr)) {
// Register with WIA event monitor to receive event notification.
CEventCallback* pCEventCB = new CEventCallback();
if (pCEventCB) {
hr = pCEventCB->QueryInterface(IID_IWiaEventCallback,(void **)ppIWiaEventCallback);
if (SUCCEEDED(hr)) {
pCEventCB->Initialize();
// hr = pIWiaDevMgr->RegisterEventCallback(0, NULL, 0, *ppIWiaEventCallback);
}
else {
DBG_ERR(("RegisterForWIAEvents, QI of IID_IWiaEventCallback failed"));
}
}
else {
DBG_ERR(("RegisterForWIAEvents, new CEventCallback failed"));
hr = E_OUTOFMEMORY;
}
pIWiaDevMgr->Release();
}
else {
DBG_ERR(("RegisterForWIAEvents, CoCreateInstance of IID_IWiaDevMgr failed"));
}
return hr;
}