COM 기반이 아닌 렌더링 플러그 인

Important

최신 인쇄 플랫폼은 Windows에서 프린터와 통신하는 데 선호되는 수단입니다. 프린터 장치 개발을 위해 Windows 10 및 11의 인쇄 환경을 사용자 지정하려면 MICROSOFT의 IPP 받은 편지함 클래스 드라이버와 PSA(인쇄 지원 앱)를 사용하는 것이 좋습니다.

자세한 내용은 최신 인쇄 플랫폼 및 인쇄 지원 앱 디자인 가이드를 참조하세요.

프린터 미니 드라이버는 DRVENABLEDATA 구조의 멤버를 채우는 OEMEnableDriver 함수를 구현하여 핵심 드라이버에 해당 기능을 알릴 수 있습니다. 이 구조체의 pdrvfn 멤버는 DRVFN 구조체의 배열 주소로 설정해야 합니다. 이 배열의 각 요소는 함수 인덱스와 IHV가 각각 구현하는 OEMXxx 함수 중 하나의 주소를 사용하여 초기화해야 합니다. (각 항목에 대한 자세한 설명은 OEMXxx 함수는 COM 기반이 아닌 DDI 후크아웃 함수를 참조 하세요.)

애플리케이션이 Microsoft Win32 GDI를 호출하여 렌더링 작업을 수행하는 경우 Win32 GDI는 일반적으로 작업을 처리하는 Unidrv 또는 Pscript5 코어 드라이버를 호출합니다. 그러나 프린터 미니 드라이버가 특정 렌더링 작업을 연결할 수 있다고 표시한 경우 핵심 드라이버는 렌더링 작업을 IHV 렌더링 플러그 인에 전달합니다.

예를 들어 Win32 LineTo API를 호출하는 애플리케이션을 고려합니다(Windows SDK 설명서에 설명됨). 일반적으로 이 경우 핵심 드라이버의 DrvLineTo DDI를 호출하여 선을 그립니다. 그러나 프린터 미니 드라이버가 이 DDI에 대한 호출을 연결하려고 함을 표시한 경우 DrvLineTo 는 IHV의 OEMLineTo 함수로 호출을 즉시 전달합니다.

IHV는 렌더링 작업을 완전히 처리하거나 코어 드라이버가 해당 작업을 처리하도록 다시 호출할 수 있도록 OEMLineTo 또는 비 COM 기반 DDI 후크아웃 함수에 설명된 다른 후크아웃 함수를 구현할 수 있습니다.

다음 의사 코드 예제와 같이 OEMLineTo 를 구현할 수 있습니다.

BOOL APIENTRY
  OEMLineTo(
    SURFOBJ  *pso,
    CLIPOBJ  *pco,
    BRUSHOBJ  *pbo,
    LONG  x1,
    LONG  y1,
    LONG  x2,
    LONG  y2,
    RECTL  *prclBounds,
    MIX  mix
)
{
if ( OEM intends to handle the call ) {
 code to handle the call
}
else
// OEM calls Unidrv's DrvLineTo DDI
  bRetVal = (((PFN_DrvLineTo)(poempdev->pfnUnidrv[UD_DrvLineTo])) (
 pso,
            pco,
            pbo,
            x1,
            x2,
 y1,
            y2,
            prclBounds,
            mix,));
}

앞의 예제에서 식

poempdev->pfnUnidrv[UD_DrvLineTo]

는 핵심 드라이버의 DrvLineTo DDI 주소로 계산됩니다. 앞에 오는 (PFN_DrvLineTo) 식은 함수 포인터를 적절한 형식으로 캐스팅합니다. 이 섹션에 나열된 각 후크아웃 함수는 자체 함수 포인터와 연결됩니다.

OEMXxx DDI가 Unidrv 코어 드라이버로 다시 호출하고 관련된 표면이 디바이스 관리형 표면인 경우 Unidrv는 FALSE를 반환하여 호출을 무시하기만 하면 됩니다.