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

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

구문

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

매개 변수

DriverVersion

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

cbSize

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

pded

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

반환 값

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

반환 코드 Description
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에 정의되어 있으므로 연결할 수 있습니다.

사용자 지정된 후킹 함수를 제공하는 경우 드라이버의 동일한 그래픽 DDI 함수를 선점합니다. 후킹 함수는 드라이버의 그래픽 DDI 함수로 다시 호출할 수도 있습니다. 자세한 내용은 사용자 지정된 그래픽 DDI 함수를 참조하세요.

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

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

  2. dhpdev 매개 변수에 대한 입력 인수입니다. 이와 동등한 사용자 지정 후킹 함수는 참조할 때 이 입력 매개 변수를 PDEVOBJ 형식으로 캐스팅해야 합니다. 그래픽 DDI 함수의 예는 DrvDitherColor입니다.

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

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

각 그래픽 DDI 함수는 하나의 렌더링 플러그 인으로 연결할 수 있습니다. 여러 플러그 인이 동일한 그래픽 DDI 함수를 후크하려고 하면 첫 번째 플러그 인 이후의 모든 후크 아웃이 무시됩니다.

렌더링 플러그 인을 만들고 설치하는 방법에 대한 자세한 내용은 Microsoft의 프린터 드라이버 사용자 지정을 참조하세요.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 prcomoem.h(Prcomoem.h 포함)