|
|
/*++
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 "winnt.hxx"
#pragma hdrstop
//
// CWinNTPrintQueue
//
STDMETHODIMP CWinNTPrintQueue::put_Model(THIS_ BSTR bstrModel) { PUT_PROPERTY_BSTR((IADsPrintQueue *)this, Model); }
STDMETHODIMP CWinNTPrintQueue::get_Model(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsPrintQueue *)this, Model); }
STDMETHODIMP CWinNTPrintQueue::put_Datatype(THIS_ BSTR bstrDatatype) { PUT_PROPERTY_BSTR((IADsPrintQueue *)this, Datatype); }
STDMETHODIMP CWinNTPrintQueue::get_Datatype(THIS_ BSTR *retval) { GET_PROPERTY_BSTR((IADsPrintQueue *)this, Datatype); }
STDMETHODIMP CWinNTPrintQueue::put_Description(THIS_ BSTR bstrDescription) { PUT_PROPERTY_BSTR((IADsPrintQueue *)this, Description); }
STDMETHODIMP CWinNTPrintQueue::get_Description(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsPrintQueue *)this, Description); }
STDMETHODIMP CWinNTPrintQueue::put_Location(THIS_ BSTR bstrLocation) { PUT_PROPERTY_BSTR((IADsPrintQueue *)this, Location); }
STDMETHODIMP CWinNTPrintQueue::get_Location(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsPrintQueue *)this, Location); }
STDMETHODIMP CWinNTPrintQueue::put_Priority(THIS_ LONG lPriority) { PUT_PROPERTY_LONG((IADsPrintQueue *)this, Priority); }
STDMETHODIMP CWinNTPrintQueue::get_Priority(THIS_ LONG FAR* retval) { GET_PROPERTY_LONG((IADsPrintQueue *)this, Priority); }
STDMETHODIMP CWinNTPrintQueue::put_StartTime(THIS_ DATE daStartTime) { PUT_PROPERTY_DATE((IADsPrintQueue *)this, StartTime); }
STDMETHODIMP CWinNTPrintQueue::get_StartTime(THIS_ DATE FAR* retval) { GET_PROPERTY_DATE((IADsPrintQueue *)this, StartTime); }
STDMETHODIMP CWinNTPrintQueue::put_UntilTime(THIS_ DATE daUntilTime) { PUT_PROPERTY_DATE((IADsPrintQueue *)this, UntilTime); }
STDMETHODIMP CWinNTPrintQueue::get_UntilTime(THIS_ DATE FAR* retval) { GET_PROPERTY_DATE((IADsPrintQueue *)this, UntilTime); }
STDMETHODIMP CWinNTPrintQueue::put_DefaultJobPriority(THIS_ LONG lDefaultJobPriority) { PUT_PROPERTY_LONG((IADsPrintQueue *)this, DefaultJobPriority); }
STDMETHODIMP CWinNTPrintQueue::get_DefaultJobPriority(THIS_ LONG FAR* retval) { GET_PROPERTY_LONG((IADsPrintQueue *)this, DefaultJobPriority); }
STDMETHODIMP CWinNTPrintQueue::put_BannerPage(THIS_ BSTR bstrBannerPage) { PUT_PROPERTY_BSTR((IADsPrintQueue *)this, BannerPage); }
STDMETHODIMP CWinNTPrintQueue::get_BannerPage(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsPrintQueue *)this, BannerPage); }
STDMETHODIMP CWinNTPrintQueue::get_PrinterPath(THIS_ BSTR FAR* retval) { HRESULT hr; hr = ADsAllocString(_pszPrinterName, retval); RRETURN_EXP_IF_ERR(hr);
}
STDMETHODIMP CWinNTPrintQueue::put_PrinterPath(THIS_ BSTR bstrPrinterPath) { //
// Cannot change this in Windows NT!
//
RRETURN_EXP_IF_ERR(E_ADS_PROPERTY_NOT_SUPPORTED); }
STDMETHODIMP CWinNTPrintQueue::get_PrintProcessor(THIS_ BSTR FAR* retval) { GET_PROPERTY_BSTR((IADsPrintQueue *)this, PrintProcessor); }
STDMETHODIMP CWinNTPrintQueue::put_PrintProcessor(THIS_ BSTR bstrPrintProcessor) { PUT_PROPERTY_BSTR((IADsPrintQueue *)this, PrintProcessor); }
STDMETHODIMP CWinNTPrintQueue::get_PrintDevices(THIS_ VARIANT FAR* retval) { GET_PROPERTY_VARIANT((IADsPrintQueue *)this, PrintDevices); }
STDMETHODIMP CWinNTPrintQueue::put_PrintDevices(THIS_ VARIANT vPrintDevices) { PUT_PROPERTY_VARIANT((IADsPrintQueue *)this, PrintDevices); }
STDMETHODIMP CWinNTPrintQueue::get_NetAddresses(THIS_ VARIANT FAR* retval) { GET_PROPERTY_VARIANT((IADsPrintQueue *)this, NetAddresses); }
STDMETHODIMP CWinNTPrintQueue::put_NetAddresses(THIS_ VARIANT vNetAddresses) { PUT_PROPERTY_VARIANT((IADsPrintQueue *)this, NetAddresses); }
//
// Class CWinNTPrintQueue
//
/* IADsFSPrintQueueOperation methods */
STDMETHODIMP CWinNTPrintQueue::PrintJobs( THIS_ IADsCollection * FAR* ppCollection ) { //
// The job collection object is created and it is passed the printer
// name. It uses this to create a printer object
//
HRESULT hr = S_OK; CWinNTPrintJobsCollection * pJobsCollection = NULL;
hr = CWinNTPrintJobsCollection::Create(_ADsPath, _Credentials, &pJobsCollection);
BAIL_IF_ERROR(hr);
hr = pJobsCollection->QueryInterface(IID_IADsCollection, (void **) ppCollection);
BAIL_IF_ERROR(hr);
pJobsCollection->Release();
cleanup:
if(FAILED(hr)){ delete pJobsCollection; }
RRETURN_EXP_IF_ERR(hr); }
//+------------------------------------------------------------------------
//
// Function: CWinNTPrintQueue::Pause
//
// Synopsis: Binds to real printer as specified in _bstrPrinterName
// and attempts to pause the real printer.
//
// Arguments: none
//
// Returns: HRESULT.
//
// Modifies: nothing
//
// History: 11-07-95 RamV Created
// Appropriated from Old NetOle Code.
//
//---------------------------------------------------------------------------
STDMETHODIMP CWinNTPrintQueue::Pause(THIS) {
BOOL fStatus = FALSE; PRINTER_DEFAULTS PrinterDefaults = {0, 0, PRINTER_ACCESS_ADMINISTER}; HANDLE hPrinter = NULL; HRESULT hr = S_OK;
fStatus = OpenPrinter( (LPTSTR)_pszPrinterName, &hPrinter, &PrinterDefaults);
if (!fStatus) { goto error; }
fStatus = SetPrinter(hPrinter, 0, NULL, PRINTER_CONTROL_PAUSE); if (!fStatus) { goto error;
}
fStatus = ClosePrinter(hPrinter);
RRETURN(S_OK);
error: hr = HRESULT_FROM_WIN32(GetLastError()); if(hPrinter) fStatus = ClosePrinter(hPrinter); RRETURN_EXP_IF_ERR(hr); }
//+---------------------------------------------------------------------------
//
// Function: CWinNTPrintQueue::Resume
//
// Synopsis: Binds to real printer as specified in _bstrPrinterName and
// attempts to resume the real printer.
//
// Arguments: void
//
// Returns: HRESULT.
//
// Modifies:
//
// History: 11-07-95 RamV Created
// Appropriated from old NetOle Project
//----------------------------------------------------------------------------
STDMETHODIMP CWinNTPrintQueue::Resume(THIS) {
BOOL fStatus = FALSE; PRINTER_DEFAULTS PrinterDefaults = {0, 0, PRINTER_ACCESS_ADMINISTER}; HANDLE hPrinter = NULL; HRESULT hr = S_OK;
fStatus = OpenPrinter( (LPTSTR)_pszPrinterName, &hPrinter, &PrinterDefaults);
if (!fStatus) { goto error; }
fStatus = SetPrinter(hPrinter, 0, NULL, PRINTER_CONTROL_RESUME); if (!fStatus) { goto error; }
fStatus = ClosePrinter(hPrinter);
RRETURN(S_OK);
error: hr = HRESULT_FROM_WIN32(GetLastError()); if(hPrinter) fStatus = ClosePrinter(hPrinter); RRETURN_EXP_IF_ERR(hr);
}
//+---------------------------------------------------------------------------
//
// Function: CWinNTPrintQueue::Purge
//
// Synopsis: Binds to real printer as specified in _PrinterName and attempts
// to purge the real printer.
//
// Arguments: void
//
// Returns: HRESULT.
//
// Modifies:
//
// History: 11-07-95 RamV Created
// Appropriated from old NetOle Code
//----------------------------------------------------------------------------
STDMETHODIMP CWinNTPrintQueue::Purge(THIS) { BOOL fStatus = FALSE; PRINTER_DEFAULTS PrinterDefaults = {0, 0, PRINTER_ACCESS_ADMINISTER}; PRINTER_INFO_2 PrinterInfo2; HANDLE hPrinter = NULL; HRESULT hr = S_OK;
fStatus = OpenPrinter( (LPTSTR)_pszPrinterName, &hPrinter, &PrinterDefaults);
if (!fStatus) { goto error; }
fStatus = SetPrinter(hPrinter, 0, NULL, PRINTER_CONTROL_PURGE); if (!fStatus) { goto error;
}
fStatus = ClosePrinter(hPrinter);
RRETURN(S_OK);
error: hr = HRESULT_FROM_WIN32(GetLastError()); if(hPrinter) fStatus = ClosePrinter(hPrinter); RRETURN_EXP_IF_ERR(hr);
}
STDMETHODIMP CWinNTPrintQueue::get_Status(THIS_ long FAR* retval) { HRESULT hr =S_OK; LPPRINTER_INFO_2 lpPrinterInfo2 = NULL; DWORD dwStatus; BOOL found;
//
// We return the WinNT Status Code as the ADS status code
//
hr = GetPrinterInfo( &lpPrinterInfo2, _pszPrinterName );
BAIL_IF_ERROR(hr);
*retval = lpPrinterInfo2->Status;
cleanup: if(lpPrinterInfo2){ FreeADsMem((LPBYTE)lpPrinterInfo2); } RRETURN_EXP_IF_ERR(hr); }
|