/*++ Routine Name: CXDSmplFilter::InitializePrintTicketManager Routine Description: This routine initializes the PrintTicket manager with the default devmode Arguments: None Return Value: HRESULT S_OK - On success E_* - On error --*/ HRESULT CXDSmplFilter::InitializePrintTicketManager( VOID ) { ASSERTMSG(m_pPrintPropertyBag != NULL, "NULL property bag pointer\n"); HRESULT hr = S_OK; if (SUCCEEDED(hr = CHECK_POINTER(m_pPrintPropertyBag, E_PENDING))) { // // Get the printer name and user PrintTicket from the property bag // CComVariant varName; CComVariant varPTReadStreamFactory; // // Avoid CComVariant if getting the XPS_FP_USER_TOKEN property. // Please refer to http://go.microsoft.com/fwlink/?LinkID=255534 for detailed information. // VARIANT varUserToken; VariantInit(&varUserToken); if (SUCCEEDED(hr = m_pPrintPropertyBag->GetProperty(XPS_FP_USER_PRINT_TICKET, &varPTReadStreamFactory)) && SUCCEEDED(hr = m_pPrintPropertyBag->GetProperty(XPS_FP_PRINTER_NAME, &varName)) && SUCCEEDED(hr = m_pPrintPropertyBag->GetProperty(XPS_FP_USER_TOKEN, &varUserToken))) { // // Retrieve the PrintReadStream for the user PrintTicket // CComPtr<IUnknown> pUnk(varPTReadStreamFactory.punkVal); CComPtr<IPrintReadStreamFactory> pPrintReadStreamFactory(NULL); CComPtr<IPrintReadStream> pPrintReadStream(NULL); if (SUCCEEDED(hr = pUnk.QueryInterface(&pPrintReadStreamFactory)) && SUCCEEDED(hr = pPrintReadStreamFactory->GetStream(&pPrintReadStream))) { // // Initialise the PT manager with the user PrintTicket and device name // hr = m_ptManager.Initialise(pPrintReadStream, varName.bstrVal, varUserToken.byref); } } VariantClear(&varUserToken); } ERR_ON_HR(hr); return hr; }
/*++ Routine Name: CXDSmplFilter::InitializePrintTicketManager Routine Description: This routine initializes the PrintTicket manager with the default devmode Arguments: None Return Value: HRESULT S_OK - On success E_* - On error --*/ HRESULT CXDSmplFilter::InitializePrintTicketManager( VOID ) { ASSERTMSG(m_pPrintPropertyBag != NULL, "NULL property bag pointer\n"); HRESULT hr = S_OK; if (SUCCEEDED(hr = CHECK_POINTER(m_pPrintPropertyBag, E_PENDING))) { // // Get the printer name and user PrintTicket from the property bag // CComVariant varName; CComVariant varPTReadStreamFactory; CComVariant varUserToken; if (SUCCEEDED(hr = m_pPrintPropertyBag->GetProperty(XPS_FP_USER_PRINT_TICKET, &varPTReadStreamFactory)) && SUCCEEDED(hr = m_pPrintPropertyBag->GetProperty(XPS_FP_PRINTER_NAME, &varName)) && SUCCEEDED(hr = m_pPrintPropertyBag->GetProperty(XPS_FP_USER_TOKEN, &varUserToken))) { // // Retrieve the PrintReadStream for the user PrintTicket // CComPtr<IUnknown> pUnk(varPTReadStreamFactory.punkVal); CComPtr<IPrintReadStreamFactory> pPrintReadStreamFactory(NULL); CComPtr<IPrintReadStream> pPrintReadStream(NULL); if (SUCCEEDED(hr = pUnk.QueryInterface(&pPrintReadStreamFactory)) && SUCCEEDED(hr = pPrintReadStreamFactory->GetStream(&pPrintReadStream))) { // // Initialise the PT manager with the user PrintTicket and device name // hr = m_ptManager.Initialise(pPrintReadStream, varName.bstrVal, varUserToken.byref); } } } ERR_ON_HR(hr); return hr; }