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.
244 lines
4.8 KiB
244 lines
4.8 KiB
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
cprinter.cxx
|
|
|
|
Abstract:
|
|
Contains methods for PrintQueue object, GeneralInfo property set
|
|
and Operation property set for the Print Queue object for the Windows NT
|
|
provider
|
|
|
|
Author:
|
|
|
|
Ram Viswanathan (ramv) 11-09-95
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "nds.hxx"
|
|
#pragma hdrstop
|
|
|
|
//
|
|
// Class CNDSPrintQueue Methods
|
|
//
|
|
|
|
struct _propmap
|
|
{
|
|
LPTSTR pszADsProp;
|
|
LPTSTR pszNDSProp;
|
|
} aPrintPropMapping[] =
|
|
{ { TEXT("Description"), TEXT("Description") },
|
|
{ TEXT("Location"), TEXT("L") },
|
|
{ TEXT("HostComputer"), TEXT("Host Server") }
|
|
};
|
|
|
|
DEFINE_IDispatch_Implementation(CNDSPrintQueue)
|
|
DEFINE_CONTAINED_IADs_Implementation(CNDSPrintQueue)
|
|
DEFINE_CONTAINED_IADsPropertyList_Implementation(CNDSPrintQueue)
|
|
DEFINE_CONTAINED_IADsPutGet_Implementation(CNDSPrintQueue, aPrintPropMapping)
|
|
|
|
CNDSPrintQueue::CNDSPrintQueue():
|
|
_pADs(NULL),
|
|
_pADsPropList(NULL)
|
|
{
|
|
_pDispMgr = NULL;
|
|
ENLIST_TRACKING(CNDSPrintQueue);
|
|
return;
|
|
}
|
|
|
|
|
|
CNDSPrintQueue::~CNDSPrintQueue()
|
|
{
|
|
|
|
if (_pADs) {
|
|
|
|
_pADs->Release();
|
|
}
|
|
|
|
if (_pADsPropList) {
|
|
|
|
_pADsPropList->Release();
|
|
}
|
|
|
|
|
|
delete _pDispMgr;
|
|
|
|
return;
|
|
}
|
|
|
|
HRESULT
|
|
CNDSPrintQueue:: CreatePrintQueue(
|
|
IADs * pADs,
|
|
REFIID riid,
|
|
LPVOID * ppvoid
|
|
)
|
|
|
|
{
|
|
|
|
CNDSPrintQueue *pPrintQueue = NULL;
|
|
HRESULT hr;
|
|
|
|
//
|
|
// Create the printer object
|
|
//
|
|
|
|
hr = AllocatePrintQueueObject(
|
|
pADs,
|
|
&pPrintQueue
|
|
);
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
//
|
|
// initialize the core object
|
|
//
|
|
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
|
|
hr = pPrintQueue->QueryInterface(
|
|
riid,
|
|
(void **)ppvoid
|
|
);
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
|
|
pPrintQueue->Release();
|
|
RRETURN(hr);
|
|
|
|
error:
|
|
delete pPrintQueue;
|
|
RRETURN_EXP_IF_ERR(hr);
|
|
}
|
|
|
|
/* IUnknown methods for printer object */
|
|
|
|
STDMETHODIMP
|
|
CNDSPrintQueue::QueryInterface(REFIID riid, LPVOID FAR* ppvObj)
|
|
{
|
|
if(!ppvObj)
|
|
{
|
|
RRETURN(E_POINTER);
|
|
}
|
|
if (IsEqualIID(riid, IID_IUnknown))
|
|
{
|
|
*ppvObj = (IADsPrintQueue FAR *)this;
|
|
}
|
|
else if (IsEqualIID(riid, IID_IDispatch))
|
|
{
|
|
*ppvObj = (IADsPrintQueue FAR *)this;
|
|
}
|
|
else if (IsEqualIID(riid, IID_ISupportErrorInfo))
|
|
{
|
|
*ppvObj = (ISupportErrorInfo FAR *) this;
|
|
}
|
|
else if (IsEqualIID(riid, IID_IADs))
|
|
{
|
|
*ppvObj = (IADsPrintQueue FAR *) this;
|
|
}
|
|
else if (IsEqualIID(riid, IID_IADsPrintQueue))
|
|
{
|
|
*ppvObj = (IADsPrintQueue FAR *) this;
|
|
}
|
|
else if (IsEqualIID(riid, IID_IADsPrintQueueOperations))
|
|
{
|
|
*ppvObj = (IADsPrintQueueOperations FAR *) this;
|
|
}
|
|
else if (IsEqualIID(riid, IID_IADsPropertyList) && _pADsPropList)
|
|
{
|
|
*ppvObj = (IADsPropertyList FAR *) this;
|
|
}
|
|
else
|
|
{
|
|
*ppvObj = NULL;
|
|
RRETURN(E_NOINTERFACE);
|
|
}
|
|
((LPUNKNOWN)*ppvObj)->AddRef();
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CNDSPrintQueue::AllocatePrintQueueObject(
|
|
IADs * pADs,
|
|
CNDSPrintQueue ** ppPrintQueue
|
|
)
|
|
{
|
|
CNDSPrintQueue FAR * pPrintQueue = NULL;
|
|
HRESULT hr = S_OK;
|
|
|
|
pPrintQueue = new CNDSPrintQueue();
|
|
if (pPrintQueue == NULL) {
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
pPrintQueue->_pDispMgr = new CDispatchMgr;
|
|
if (pPrintQueue->_pDispMgr == NULL) {
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
hr = LoadTypeInfoEntry(
|
|
pPrintQueue->_pDispMgr,
|
|
LIBID_ADs,
|
|
IID_IADsPrintQueue,
|
|
(IADsPrintQueue *)pPrintQueue,
|
|
DISPID_REGULAR
|
|
);
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
hr = LoadTypeInfoEntry(
|
|
pPrintQueue->_pDispMgr,
|
|
LIBID_ADs,
|
|
IID_IADsPrintQueueOperations,
|
|
(IADsPrintQueueOperations *)pPrintQueue,
|
|
DISPID_REGULAR
|
|
);
|
|
|
|
hr = LoadTypeInfoEntry(
|
|
pPrintQueue->_pDispMgr,
|
|
LIBID_ADs,
|
|
IID_IADsPropertyList,
|
|
(IADsPropertyList *)pPrintQueue,
|
|
DISPID_VALUE
|
|
);
|
|
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
//
|
|
// Store the pointer to the internal generic object
|
|
// AND add ref this pointer
|
|
//
|
|
|
|
pPrintQueue->_pADs = pADs;
|
|
pADs->AddRef();
|
|
|
|
*ppPrintQueue = pPrintQueue;
|
|
RRETURN(hr);
|
|
|
|
error:
|
|
|
|
delete pPrintQueue;
|
|
RRETURN(hr);
|
|
}
|
|
|
|
/* ISupportErrorInfo method */
|
|
STDMETHODIMP
|
|
CNDSPrintQueue::InterfaceSupportsErrorInfo(
|
|
THIS_ REFIID riid
|
|
)
|
|
{
|
|
if (IsEqualIID(riid, IID_IADs) ||
|
|
IsEqualIID(riid, IID_IADsPrintQueue) ||
|
|
IsEqualIID(riid, IID_IADsPrintQueueOperations) ||
|
|
IsEqualIID(riid, IID_IADsPropertyList)) {
|
|
RRETURN(S_OK);
|
|
} else {
|
|
RRETURN(S_FALSE);
|
|
}
|
|
}
|