Unidrv/PScript5 플러그 인 구성 모듈

Windows Vista에서 Unidrv 또는 PScript5 구성 플러그 인을 사용하는 XPSDrv 인쇄 드라이버 구성 모듈은 다음과 같은 새로운 기능을 지원합니다.

  • PrintTicket 및 PrintCapabilities 기능

  • Unidrv 및 PScript5 설정을 조작하기 위한 IPrintCoreHelper 인터페이스

  • XPSDrv 문서 이벤트

  • 필터 파이프라인에서 인쇄 드라이버 필터와의 통신

PrintTicket 및 PrintCapabilities 인터페이스 지원

Unidrv 및 PScript5 인쇄 드라이버 플러그 인은 IPrintOemPrintTicketProvider 인터페이스를 구현하여 PrintTicket 및 PrintCapabilities 데이터를 사용자 지정합니다. 이 인터페이스의 메서드를 사용하면 플러그 인이 플러그 인에서 제공하는 사용자 지정 기능에 대한 PrintTicket 및 PrintCapabilities 처리를 사용자 지정할 수 있습니다.

Unidrv 및 PScript5 인쇄 드라이버는 IPrintTicketProvider 인터페이스를 구현하고 GPD 또는 PPD 파일을 기반으로 하는 PrintTicket 및 PrintCapabilities 데이터의 초기 버전을 생성합니다. 초기 처리 후 Unidrv 또는 PScript5 인쇄 드라이버는 플러그 인의 IPrintOemPrintTicketProvider 인터페이스를 호출하여 인쇄 드라이버가 이 데이터를 호출 애플리케이션으로 반환하기 전에 플러그 인이 이 데이터를 수정할 수 있도록 합니다.

IPrintCoreHelper 인터페이스

IPrintCoreHelper 인터페이스를 사용하면 인쇄 드라이버 구성 플러그 인이 다음을 수행할 수 있습니다.

  • Unidrv 및 PScript5 인쇄 드라이버에서 사용하는 DEVMODE 구조의 프라이빗 부분에서 값을 가져와서 설정합니다.

  • 인쇄 드라이버 기능, 옵션 및 제약 조건을 열거합니다.

  • 전체 GPD 또는 부분 PPD 파일 콘텐츠에 액세스합니다.

플러그 인이 Unidrv 또는 PScript5 구성을 올바르게 설정하고 전체 UI(사용자 인터페이스) 대체 기능을 사용하도록 설정하는 유일한 방법은 다음 IPrintCoreHelper 인터페이스를 사용하는 것입니다.

DECLARE_INTERFACE_(IPrintCoreHelper, IUnknown) {
  // IUnknown methods skipped
  STDMETHOD(CreateInstanceOfMSXMLObject)(...)
  STDMETHOD(EnumConstrainedOptions)(...)
  STDMETHOD(EnumFeatures)(...)
  STDMETHOD(EnumOptions)(...)
  STDMETHOD(GetOption)(...)
  STDMETHOD(SetOptions)(...)
  STDMETHOD(WhyConstrained)(...)
};

다음 두 개의 추가 인터페이스인 IPrintCoreHelperUniIPrintCoreHelperPSIPrintCoreHelper 인터페이스에서 파생됩니다. 이러한 인터페이스는 각각 Unidrv 및 PScript5 인쇄 드라이버와 관련이 있으며 각 드라이버에 고유한 추가 메서드를 포함합니다.

DECLARE_INTERFACE_(IPrintCoreHelperUni, IUnknown) {
  // IUnknown methods skipped
  // IPrintCoreHelper methods skipped
  STDMETHOD(CreateDefaultGDLSnapshot)(...)
  STDMETHOD(CreateGDLSnapshot)(...)
};

DECLARE_INTERFACE_(IPrintCoreHelperPS, IUnknown) {
  // IUnknown methods skipped
  // IPrintCoreHelper methods skipped
  STDMETHOD(GetFeatureAttribute)(...)
  STDMETHOD(GetGlobalAttribute)(...)
  STDMETHOD(GetOptionAttribute)(...)
};

다음 코드 예제에서는 IPrintCoreHelper 인터페이스를 사용하여 DEVMODE 구조체의 정보를 쿼리하는 방법을 보여 줍니다. 이 예제는 Windows WDK(드라이버 키트)의 XPSDrv 인쇄 드라이버 샘플 코드의 일부입니다.

HRESULT
CBookletDMPTConv::GetDrvSettingsFromDM(
    __in    PDEVMODE                         pDevmode,
            ULONG                            cbDevmode,
    __out   GPD::Binding::DrvSettings*       pDrvSettings
    )
{
  HRESULT hr = S_OK;

  for (GPD::Binding::EGPDSettings setting = 
        GPD::Binding::EGPDSettingsMin;
      setting < GPD::Binding::EGPDSettingsMax && SUCCEEDED(hr);
      setting++)
  {
    PCSTR pszOption;
    hr = m_pCoreHelper->GetOption(
      pDevmode,
      cbDevmode, 
      m_featureNames[setting], 
      &pszOption)
    if (SUCCEEDED(hr))
    {
      hr = GPDSettingFromOptionString(
      pszOption, 
      setting, 
      pDrvSettings);
    }
  }

  return hr;
}