IPrintOemPS::EnableDriver 메서드(prcomoem.h)

IPrintOemPS::EnableDriver 메서드를 사용하면 Pscript 용 렌더링 플러그 인이 일부 그래픽 DDI 함수를 후크할 수 있습니다.

구문

HRESULT EnableDriver(
  DWORD          DriverVersion,
  DWORD          cbSize,
  PDRVENABLEDATA pded
);

매개 변수

DriverVersion

호출자가 제공한 인터페이스 버전 번호입니다. 이 값은 PRINTER_OEMINTF_VERSION printoem.h로 정의됩니다.

cbSize

pded가 가리키는 구조체의 호출자 제공 크기(바이트)입니다.

pded

DRVENABLEDATA 구조체에 대한 호출자 제공 포인터입니다.

반환 값

메서드는 다음 값 중 하나를 반환해야 합니다.

반환 코드 설명
S_OK
작업에 성공했습니다.
E_FAIL
작업이 실패했습니다.
E_NOTIMPL
메서드가 구현되지 않았습니다.

설명

IPrintOemPS::EnableDriver 메서드를 사용하면 렌더링 플러그 인이 프린터 그래픽 DLL로 내보낸 DrvEnableDriver 함수와 동일한 유형의 작업을 수행할 수 있습니다.

DrvEnableDriver 함수와 마찬가지로 이 IPrintOemPS::EnableDriver 메서드는 후킹 함수라고 하는 내부적으로 지원되는 그래픽 DDI 함수의 주소를 제공합니다. 다른 일회성 초기화 작업을 수행할 수도 있습니다. DrvEnableDriver 함수와 달리 메서드 구현 IPrintOemPS::EnableDriver 은 선택 사항입니다.

참고 구현 IPrintOemPS::EnableDriver하는 경우 IPrintOemPS::D isableDriver도 구현해야 합니다. 이전 메서드에서 시작된 작업은 후자의 메서드에서 완료해야 할 수 있습니다. 예를 들어 큰 버퍼가 할당 IPrintOemPS::EnableDriver되었지만 IPrintOemPS::D isableDriver에서 할당 취소되지 않은 경우 메모리 누수가 발생할 수 있습니다.
메서드는 제공된 DRVENABLEDATA 구조를 채우고 DRVFN 구조의 배열을 할당해야 합니다. 후크 아웃 그래픽 DDI 함수를 식별하는 winddi.h 정의 인덱스 값과 함께 후킹 함수에 대한 포인터로 배열을 채워야 합니다.

Pscript5용 렌더링 플러그 인은 Pscript5 드라이버가 함수를 정의하는 경우에만 그래픽 DDI 함수를 후크아웃할 수 있습니다. 다음 그래픽 DDI 함수는 Pscript5 및 Unidrv에서 정의되므로 후크 아웃할 수 있습니다.

DrvAlphaBlend DrvBitBlt DrvCopyBits DrvDitherColor DrvEndDoc DrvEscape DrvFillPath DrvFontManagement DrvGetGlyphMode DrvGradientFill DrvIcmCreateColorTransform DrvIcmDeleteColorTransform DrvLineTo DrvNextBand DrvPlgBlt DrvQueryDeviceSupport DrvQueryAdvanceWidths DrvQueryFont DrvQueryFontData DrvQueryFontTree DrvRealizeBrush DrvSendPage DrvStartBanding DrvStartDoc DrvStartPage DrvStretchBlt DrvStretchBltROP DrvStrokeAndFillPath DrvStrokePath DrvTextOut DrvTransparentBlt 사용자 지정된 후킹 함수를 제공하는 경우 드라이버의 동일한 그래픽 DDI 함수를 선점합니다. 후킹 함수는 드라이버의 그래픽 DDI 함수로 다시 호출할 수도 있습니다. 자세한 내용은 사용자 지정된 그래픽 DDI 함수를 참조하세요.

사용자 지정된 후킹 함수는 동일한 그래픽 DDI 함수와 동일한 입력 및 출력 매개 변수를 가지며, 그래픽 DDI 함수는 PDEV 포인터를 수신하고, 사용자 지정된 후크 함수는 DEVOBJ 포인터를 수신합니다. 이러한 함수가 PDEV 포인터를 수신하는 방법에는 두 가지가 있습니다.

  1. 대상 화면에 대한 SURFOBJ 구조체의 dhpdev 멤버 내용입니다.

    동일한 사용자 지정 후킹 함수의 경우 대상 SURFOBJ 구조체의 dhpdev 멤버는 DEVOBJ 구조를 가리키며 참조할 때 PDEVOBJ 형식으로 캐스팅되어야 합니다. 그래픽 DDI 함수의 예는 DrvBitBlt입니다.

  2. dhpdev 매개 변수에 대한 입력 인수입니다.

    해당하는 사용자 지정된 후킹 함수는 참조할 때 이 입력 매개 변수를 PDEVOBJ 형식으로 캐스팅해야 합니다. 그래픽 DDI 함수의 예는 DrvDitherColor입니다.

Note that while a 프린터 그래픽 DLL에는 DRVENABLEDATA 구조에 DrvEnablePDEV, DrvDisablePDEVDrvResetPDEV 함수의 주소가 포함되어 있으며, Pscript5용 렌더링 플러그 인은 IPrintOemPS 인터페이스의 메서드로 EnablePDEV, DisablePDEVResetPDEV를 구현하며 해당 주소를 DRVENABLEDATA 구조에 배치하지 않습니다.

여러 렌더링 플러그 인에서 메서드를 내보내는 경우 IPrintOemPS::EnableDriver 플러그 인이 설치를 위해 지정된 순서대로 메서드가 호출됩니다.

참고 각 그래픽 DDI 함수는 하나의 렌더링 플러그 인으로 후크아웃할 수 있습니다. 여러 플러그 인이 동일한 그래픽 DDI 함수를 연결하려고 하면 첫 번째 플러그 인 이후의 모든 후크 아웃이 무시됩니다.
렌더링 플러그 인을 만들고 설치하는 방법에 대한 자세한 내용은 Microsoft의 프린터 드라이버 사용자 지정을 참조하세요.

요구 사항

   
대상 플랫폼 데스크톱
헤더 prcomoem.h(Prcomoem.h 포함)