Ejemplo n.º 1
0
/*++

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;
}
Ejemplo n.º 2
0
/*++

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;
}