V4 프린터 드라이버 속성 모음

Important

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

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

v4 인쇄 드라이버 모델은 사용자 지정된 UI 애플리케이션에서 렌더링 프로세스로의 데이터 흐름을 용이하게 하는 여러 속성 모음을 제공합니다.

이러한 속성 모음을 사용하면 사용자 지정 속성 및 기능 정의를 사용자 지정 UI에서 만든 다음 렌더링 프로세스에서 사용할 수 있습니다. 모든 속성 모음은 JavaScript의 IPrinterScriptablePropertyBag 인터페이스를 사용하거나 다른 환경의 IPrinterPropertyBag 인터페이스를 사용하여 노출됩니다.

다음 표에서는 여러 구성 요소를 사용하여 v4 인쇄 드라이버의 여러 부분에서 속성 모음 개체를 가져오는 방법에 대한 개요를 제공합니다.

구성 요소 설명
JavaScript 제약 조건 스크립트 드라이버 및 큐 속성 모음은 scriptContext 매개 변수를 사용하여 JavaScript 제약 조건 스크립트에 전달됩니다. 이 매개 변수는 IPrinterScriptContext 형식이며 자식을 포함합니다.

DriverProperties – 드라이버 속성 모음을 나타냅니다.

QueueProperties – 큐 속성 모음을 참조합니다.

UserProperties – 사용자 속성 모음입니다.

DEVMODE 속성 모음은 DEVMODE <-> PrintTicket 변환 메서드에 devModeProperties 매개 변수(IPrinterScriptablePropertyBag 형식)로 전달됩니다. 다른 메서드에서는 사용할 수 없습니다.
USB Bidi JavaScript 드라이버 및 큐 속성 모음은 scriptContext 매개 변수를 사용하여 USB Bidi JavaScript 스크립트에 전달됩니다. 이 매개 변수는 IPrinterScriptContext 형식이며 자식을 포함합니다.

DriverProperties – 드라이버 속성 모음을 나타냅니다.

QueueProperties – 큐 속성 모음을 참조합니다.
프린터 확장 앱 모든 속성 모음은 IPrinterExtensionEventArgs 매개 변수의 일부로 OnDriverEvent 처리기에 전달됩니다. 모두 IPrinterPropertyBag 유형입니다. 다음과 같이 지정됩니다.

DriverProperties – 드라이버 속성 모음을 나타냅니다.

UserProperties – 사용자 속성 모음입니다.

PrinterQueue.GetProperties()– 큐 속성 모음을 참조합니다.
UWP 디바이스 앱 IPrinterExtensionContext 개체를 사용하여 활성화하는 동안 모든 속성 모음이 전달됩니다. 다음과 같이 지정됩니다.

DriverProperties – 드라이버 속성 모음을 나타냅니다.

UserProperties – 사용자 속성 모음입니다.

PrinterQueue.GetProperties()– 큐 속성 모음을 참조합니다.
XPS 렌더링 필터 XPS 필터는 "DriverPropertyBag" 속성 이름 또는 filterpipeline.h에서 XPS_FP_PROPERTY_BAG 정의된 값을 사용하여 인쇄 필터 파이프라인 속성 모음 내에서 드라이버 속성 모음에 액세스할 수 있습니다. DriverPropertyBag에 대한 정보는 다음과 같습니다.

속성 형식: VT_UNKNOWN

설명: IUnknown 인터페이스에 대한 포인터입니다. QueryInterface를 호출하여 드라이버 속성 모음에 대한 IPrinterPropertyBag 인터페이스에 대한 포인터를 가져옵니다.

또한 XPS 필터는 "QueuePropertyBag" 속성 이름 또는 filterpipeline.h에서 XPS_FP_QUEUE_PROPERTY_BAG 정의된 값을 사용하여 인쇄 필터 파이프라인 속성 모음 내에서 큐 속성 모음에 액세스할 수 있습니다. QueuePropertyBag에 대한 정보는 다음과 같습니다.

속성 형식: VT_UNKNOWN

설명: IUnknown 인터페이스에 대한 포인터입니다. QueryInterface를 호출하여 큐 속성 모음에 대한 IPrinterPropertyBag 인터페이스에 대한 포인터를 가져옵니다.

JavaScript 구현에서 속성 모음은 매개 변수로 전달됩니다. 프린터 확장 애플리케이션에서 속성 모음은 애플리케이션을 시작하는 데 사용되는 이벤트 인수의 멤버로 전달됩니다.

COM IPrinterQueue, IPrinterExtensionContext 및 IPrinterExtensionEventArgs 인터페이스에서 제공하는 속성 모음 접근자와 Javascript 구현의 속성 모음 접근자는 속성 모음을 지정하지 않았거나 찾을 수 없는 경우 예외를 throw합니다. 또한 IPrinterPropertyBag 인터페이스에서 개별 속성을 쿼리하면 속성을 찾을 수 없는 경우 예외가 throw됩니다. 속성을 사용할 수 없는 경우 충돌을 방지하려면 try catch 문을 사용해야 합니다.

드라이버 속성 모음

드라이버 속성 모음은 드라이버가 읽기 전용으로 사용하기 위해 속성 또는 데이터 Blob을 미리 정의할 수 있는 데이터 저장소입니다. v4 매니페스트 파일에서 "PropertyBag" 지시문을 사용하여 지정할 수 있으며 런타임에 수정할 수 없습니다.

Windows 드라이버 키트에는 드라이버 속성 모음에 대한 템플릿 프로젝트가 포함되어 있습니다. 드라이버 속성 모음은 컴파일된 이진 Blob입니다. Visual Studio에는 컴파일된 드라이버 속성 모음을 생성하는 템플릿이 포함되어 있습니다. 이 템플릿에 대해 생성된 XML 파일은 속성 모음이 아니며, 대신 이 템플릿의 컴파일된 출력은 v4 매니페스트 파일에 지정해야 하는 속성 모음 파일입니다.

사용자 속성 모음

사용자 속성 모음을 사용하면 파트너가 사용자별 컴퓨터 로컬 컨텍스트에 설정을 저장할 수 있습니다. 이 속성 모음은 "다시 표시 안 함"처럼 사용자 기본 설정에 대한 스토리지 메커니즘으로 적합합니다. 이 속성 모음은 관리자가 관리할 수 없으며 프린터 공유 중에 클라이언트와 서버 간에 동기화되지 않습니다. 사용자 속성 모음은 런타임에만 설정되며 프린터 확장, UWP 디바이스 앱 및 JavaScript 제약 조건에서만 사용할 수 있습니다.

JavaScript 제약 조건은 사용자 컨텍스트 외부에서도 호출될 수 있으므로, 디풀하는 동안에는 사용자 속성 모음을 사용할 수 없으며 Windows는 HRESULT_FROM_WIN32(ERROR_NOT_FOUND)를 반환합니다.

DEVMODE 속성 모음

DEVMODE 속성 모음은 DEVMODE 구조의 프라이빗 섹션에서 콘텐츠를 구성하는 데 사용됩니다. ConvertPrintTicketToDevMode 호출 중에 DEVMODE 속성 모음의 내용을 채우기 위해 JavaScript가 호출됩니다. ConvertDevModeToPrintTicket 호출 중에 JavaScript가 호출되어 DEVMODE 속성 모음에서 지속형 설정을 읽고 PrintTicket에 다시 저장합니다.

일부 시나리오에서 데이터 손실을 방지하기 위해 DEVMODE 구조로 직렬화해야 하므로 이 속성 모음의 크기는 60KB 미만으로 제한됩니다(DEVMODE의 할당된 섹션 크기에 따라 정확한 크기가 달라지므로). 사용 가능한 정확한 크기는 DEVMODE의 공개 섹션과 구성 모듈에서 관리하는 프라이빗 섹션의 크기에 따라 결정되므로 드라이버마다 다릅니다.

DEVMODE 속성 모음은 XML 파일을 사용하여 속성 모음의 멤버를 지정하고 convertPrintTicketToDevMode 및 convertDevModeToPrintTicket API를 사용하여 변환을 처리합니다. DevModeMap 지시문을 사용하여 v4 매니페스트에서 XML DEVMODE 매핑 파일을 지정해야 합니다.

다음 코드 조각은 DEVMODE 속성 모음 매핑 XML 샘플을 보여줍니다.

<?xml version="1.0" encoding="utf-8"?>
<Properties xmlns="https://schemas.microsoft.com/windows/2011/08/printing/devmodemap">
  <Property Name="FabrikamAccountCode">
    <String Length="32"></String>
  </Property>  
</Properties>

다음 스크린샷은 DEVMODE 속성 모음 매핑 XML 스키마를 보여 하며 WDK 설치 폴더의 다음 경로에서 찾을 수 있습니다. \Include\um\printerdriverdevmodemap.xsd.pr

devmode 속성 모음 매핑 xml 스키마입니다.

DEVMODE 속성 모음 매핑에 대한 XML 파일은 INFGate 도구에서 유효성을 검사합니다.

Queue 속성 모음

큐 속성 모음은 폼-트레이 매핑 및 설치 가능한 옵션과 같은 프린터 속성의 구성을 포함하여 큐별 구성 설정을 저장합니다. 드라이버 정의 속성 및 프린터 속성은 PowerShell에서 구성할 수 있는 반면 폼 대 트레이 매핑은 프린터 속성 UI에서 구성할 수 있습니다. 프린터 확장에서 속성 값을 편집할 수 없습니다.

큐 속성 모음은 많은 v4 인쇄 드라이버에 대해 자동으로 만들어지지만 드라이버는 XML 파일을 사용하여 구성하는 추가 속성을 제공할 수도 있습니다. 이 XML 파일은 드라이버 속성 모음 도구를 사용하여 컴파일하면 안 됩니다. 큐 속성 모음은 다음 중 하나를 수행하는 v4 인쇄 드라이버에서 지원하는 프린터에 사용할 수 있습니다.

  1. 여러 트레이 지정 또는

  2. GPD 또는 PPD 파일에 설치 가능한 옵션 지정 또는

  3. QueueProperties 지시문을 사용하여 드라이버 매니페스트에 큐 속성 모음을 지정합니다.

관리자는 PowerShell을 사용하여 큐 속성 모음을 구성합니다. 다음 명령 허용(cmdlet)은 Get-Printer cmdlet을 사용하여 가져올 수 있는 프린터 개체의 자식입니다.

Cmdlet 이름 설명
Get-PrinterProperty -printerName <printerName> -name <propertyName*> 하나 이상의 속성을 검색합니다(-name은 globbing을 지원합니다).
Set-PrinterProperty -inputObject <printerPropertyObject> 지속형 printerPropertyObject를 사용하여 인쇄 큐 속성을 변경합니다.
Set-PrinterProperty -printerName <printerName> -PropertyName propertyName> <-Value <값> 지정된 속성을 지정된 값으로 변경합니다.

설치 가능한 옵션

이러한 옵션(예: 이중체 상태)은 큐 속성 모음에 개별 속성으로 노출됩니다. 각 속성의 이름은 다음과 같이 지정됩니다. 여기서 기능 이름은 드라이버의 GPD 또는 PPD 파일의 기능 이름을 기반으로 합니다.

Config:<feature name>

예를 들어 Config:DuplexUnit

속성 값은 관리자가 선택한 옵션의 키워드 이름입니다. 예를 들어 설치됩니다. 설치 가능한 옵션은 큐 속성에 사용되는 것과 동일한 Set-PrinterProperty cmdlet을 사용하여 편집할 수 있습니다.

Windows 8.1, 관리자 권한이 있는 사용자 또는 인쇄 큐를 만든 사용자는 UWP 디바이스 앱에서 큐 속성 모음에 대한 설치 가능 옵션 및 큐별 구성 설정을 변경할 수 있습니다.

용지함 매핑에 양식

v4 인쇄 드라이버가 있고 트레이가 두 개 이상 있는 프린터의 경우 "FormTrayTable"이라는 속성의 큐 속성 모음을 통해 "form to tray" 매핑이 노출됩니다.

이 속성은 양식 이름이 다음 중 하나인 형식의 쌍을 포함하는 null로 끝나는 문자열로 형식 <tray name>, <form name>, 이 지정됩니다.

  1. 용지 크기가 GPD 또는 PPD 파일의 인쇄 스키마에 매핑되는 경우(표준 *PaperSize/*PageSize 키워드 또는 *(MS)PrintSchemaKeywordMap 사용) 양식 이름은 다음 형식을 따릅니다.

    PrintSchema:<Paper Size name>

    예를 들어 PrintSchema:NorthAmericaLetter

  2. 양식이 FORM_USER 플래그에 의해 결정되는 사용자 정의 양식인 경우 양식 이름은 다음과 같습니다. 양식 인덱스는 스풀러의 양식 데이터베이스에서 사용되는 값과 동일합니다. 이는 다음과 같이 PrintTicket에서 용지 크기를 지정할 때 사용되는 인덱스와 일치합니다.

    UserForm<form index>

    예를 들어 UserForm123

  3. 그렇지 않으면 양식 이름은 다음 형식을 따릅니다. 여기서 양식 이름은 GPD의 *PaperSize 또는 PPD의 *PageSize에 지정된 이름입니다.

    Config:<name>

    예를 들어 Config:_8_5x16

전체 예제 문자열은 다음과 같이 읽습니다.

Config:Tray1,PrintSchema:NorthAmericaLetter,Config:Tray2,Config:_8_5X16,Config:Manual,UserForm123,\0

렌더링 필터는 들어오는 PrintTicket의 PageMediaSize 설정을 읽고 FormTrayTable의 양식 이름 값에서 해당 값을 검색해야 합니다.

Queue 속성 모음 XML 샘플

다음 코드 조각은 Name1, Name2, Name3 및 해당 자식 요소의 세 가지 속성에 사용할 수 있는 XML 구문을 보여줍니다.

<?xml version="1.0" encoding="utf-8"?>
<Properties xmlns= "https://schemas.microsoft.com/windows/2011/08/printing/queueproperties">
  <Property Name="Name1">
    <String>String1</String>
  </Property>
  <Property Name="Name2">
    <Int32>3244</Int32>
  </Property>
  <Property Name="Name3">
    <Bool>true</Bool>
  </Property>
</Properties>

Queue 속성 모음 XML 스키마

다음 스크린샷은 큐 속성 모음 XML 스키마를 보여 줍니다. 이 스키마는 WDK 설치 폴더의 다음 경로에서 찾을 수 있습니다. \Include\um\printqueueproperties.xsd.

queue 속성 모음 xml 스키마입니다.

IPrinterExtensionContext

IPrinterExtensionEventArgs

IPrinterPropertyBag

IPrinterScriptablePropertyBag

IPrinterScriptContext

인쇄 필터 파이프라인 속성 모음