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)(...)
};
다음 두 개의 추가 인터페이스인 IPrintCoreHelperUni 및 IPrintCoreHelperPS는 IPrintCoreHelper 인터페이스에서 파생됩니다. 이러한 인터페이스는 각각 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;
}