다음을 통해 공유


DrvPrinterEvent 함수(winddiui.h)

프린터 인터페이스 DLL의 DrvPrinterEvent 함수는 프린터 드라이버의 작업이 필요할 수 있는 프린터 관련 이벤트를 처리할 때 인쇄 스풀러에서 호출됩니다.

구문

BOOL DrvPrinterEvent(
  [in] LPWSTR pPrinterName,
       int    DriverEvent,
       DWORD  Flags,
       LPARAM lParam
);

매개 변수

[in] pPrinterName

NULL로 종료된 프린터 이름 문자열에 대한 호출자 제공 포인터입니다. 문자열 형식은 \Machine\PrinterName 으로 원격 프린터를 지정하거나 PrinterName 을 사용하여 로컬 프린터를 지정할 수 있습니다.

DriverEvent

이벤트를 식별하는 호출자 제공 이벤트 코드입니다. 다음 이벤트 코드가 정의됩니다.

이벤트 코드 정의
PRINTER_EVENT_ADD_CONNECTION 스풀러는 클라이언트 사용자가 이전에 만든 원격 프린터에 연결할 수 있도록 AddPrinterConnection 함수에 대한 호출 처리를 방금 완료했습니다.
PRINTER_EVENT_ATTRIBUTES_CHANGED 프린터의 특성 비트가 변경되었습니다. SetPrinter 함수에 대한 애플리케이션의 호출에 대한 응답으로 스풀러는 프린터 드라이버의 DrvPrinterEvent 함수를 호출하여 호출에 이벤트 코드를 전달합니다. 이 이벤트 코드를 사용하는 경우 lParam 매개 변수는 이전 특성과 새 특성을 설명하는 PRINTER_EVENT_ATTRIBUTES_INFO 구조를 가리킵니다.
PRINTER_EVENT_CACHE_DELETE 스풀러가 클라이언트의 파일 캐시를 삭제하고 있습니다.
PRINTER_EVENT_CACHE_REFRESH 스풀러가 클라이언트의 캐시된 파일을 업데이트하고 있습니다.
PRINTER_EVENT_CONFIGURATION_CHANGE 예약되어 있습니다.
PRINTER_EVENT_CONFIGURATION_UPDATE 프린터 구성이 변경되었습니다. 이 이벤트 코드를 사용하는 경우 lParam 매개 변수는 Bidi 알림 스키마에 따라 형식이 지정된 알림이 포함된 유니코드 문자열을 가리킵니다.
PRINTER_EVENT_DELETE_CONNECTION 스풀러는 클라이언트 사용자가 프린터 연결을 제거할 수 있는 DeletePrinterConnection 함수에 대한 호출 처리를 방금 완료했습니다.
PRINTER_EVENT_DELETE 스풀러는 관리자가 프린터 instance 삭제할 수 있도록 DeletePrinter 함수에 대한 호출 처리를 방금 완료했습니다.
PRINTER_EVENT_INITIALIZE 스풀러는 관리자가 서버에서 프린터를 사용할 수 있도록 하는 AddPrinter 함수 또는 관리자가 프린터 상태를 수정할 수 있도록 하는 SetPrinter 함수에 대한 호출 처리를 막 마쳤습니다. 클라이언트 쪽 렌더링 연결에서 클라이언트 컴퓨터가 GUID 프린터를 추가했습니다. PRINTER_EVENT_INITIALIZE 이벤트는 Windows Vista 및 이전 릴리스에서 DrvPrinterEvent 호출에 대한 NULL lParam 매개 변수 값을 지정합니다. Windows 7 이상 릴리스의 경우 lParam 매개 변수는 사용자 토큰 핸들입니다. 인쇄 드라이버는 반환된 토큰 핸들을 사용하여 사용자 데이터를 쿼리하거나 사용자를 가장할 수 있습니다.

Flags

다음과 같이 정의된 호출자 제공 비트 플래그입니다.

정의
PRINTER_EVENT_FLAG_NO_UI 설정된 경우 함수는 사용자 인터페이스를 표시 해서는 안 됩니다 . 인쇄 프로세서, 인쇄 모니터 또는 프린터 드라이버를 설치하는 동안 사용자 인터페이스가 허용되는 유일한 방법은 VendorSetup 지시문을 사용하는 것입니다. 자세한 내용은 프린터 INF 파일 항목사용자 지정된 프린터 설정 작업을 참조하세요 .

주의

VendorSetup 지시문은 더 이상 사용되지 않으며 개발하는 v3 또는 v4 드라이버에서 사용해서는 안 됩니다. VendorSetup에 대한 이 정보는 참조 전용 또는 이 INF 지시문을 이미 사용하는 기존 v3 드라이버의 유지 관리를 위해 제공됩니다.

lParam

DriverEvent 매개 변수를 PRINTER_EVENT_ATTRIBUTES_CHANGED 설정하지 않는 한 사용되지 않습니다. 이 경우 lParam 에는 PRINTER_EVENT_ATTRIBUTES_INFO 구조체의 주소가 포함됩니다. ( DriverEvent 매개 변수에 대한 이전 설명을 참조하세요.) DriverEvent 매개 변수의 다른 모든 값에 대해 lParam 매개 변수는 NULL입니다.

반환 값

작업이 성공하면 함수는 TRUE를 반환해야 합니다 . 그렇지 않으면 FALSE를 반환해야 합니다. 그러나 현재 함수의 반환 값을 확인하는 유일한 시간은 DriverEvent가 PRINTER_EVENT_INITIALIZE 설정된 상태에서 AddPrinter 함수를 처리하는 동안 스풀러가 DrvPrinterEvent를 호출한 경우입니다. 이 경우 DrvPrinterEventFALSE 를 반환하는 경우 스풀러는 프린터를 만들지 않고 대신 AddPrinter 가 실패합니다.

설명

모든 프린터 인터페이스 DLLDrvPrinterEvent 함수를 제공해야 하며 함수는 PRINTER_EVENT_INITIALIZE 이벤트 코드를 지원해야 합니다. 다른 모든 이벤트 코드에 대한 지원은 선택 사항입니다.

PRINTER_EVENT_INITIALIZE 이벤트를 처리할 때 저장된 레지스트리 설정은 SetPrinterData를 호출하여 HKEY_LOCAL_MACHINE 키 아래에 저장해야 합니다. PRINTER_EVENT_INITIALIZE 및 PRINTER_EVENT_DELETE 이벤트 코드의 경우 스풀러는 호출자가 관리자 권한을 가지고 있음을 확인하고 호출자를 가장하는 동안 DrvPrinterEvent 를 호출합니다.

반면, PRINTER_EVENT_ADD_CONNECTION 이벤트를 처리할 때 레지스트리에 설정을 저장해야 하는 경우 프린터 인터페이스 DLL은 사용자별로 저장되도록 HKEY_CURRENT_USER 키 아래에 설정을 작성해야 합니다. 그런 다음 로밍 프로필이 있는 사용자가 다른 시스템에 로그하는 경우 연결이 사용자를 따릅니다. DrvPrinterEvent 함수는 사용자가 처음 연결을 만들 때만 호출되며, 이후에 로밍 프로필을 사용하여 다른 시스템에 로그온할 때는 호출되지 않습니다.

PRINTER_EVENT_ADD_CONNECTION 및 PRINTER_EVENT_DELETE_CONNECTION 이벤트 코드의 경우 DrvPrinterEvent 함수의 실행 컨텍스트는 호출 애플리케이션(일반적으로 인쇄 폴더)이며 함수는 사용자 인터페이스를 표시할 수 있습니다. 다른 모든 이벤트 코드의 경우 실행 컨텍스트는 인쇄 스풀러이며 사용자 인터페이스를 표시할 수 없습니다.

연결을 만들 때 사용자 인터페이스를 표시할 수 있는 드라이버의 예는 FAX 드라이버로, 사용자에게 사용자의 이름 및 전화 번호(FAX 보낸 사람)를 묻는 메시지를 표시하고 연결이 삭제될 때까지 정보를 저장할 수 있습니다.

클라이언트 캐시에 저장할 수 있는 파일 형식의 예는 레지스트리에 쓸 정보가 너무 많은 큰 글꼴 메트릭 파일입니다. DrvPrinterEvent 함수의 이벤트 코드가 PRINTER_EVENT_CACHE_REFRESH 프린터 인터페이스 DLL은 서버에서 파일을 다시 로드하여 캐시가 최신 상태인지 확인할 수 있습니다.

요구 사항

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