다음을 통해 공유


드라이버 버전 관리 인쇄

중요

인쇄 지원 앱(PSA)과 함께 Microsoft의 IPP 받은 편지함 클래스 드라이버를 사용하여 프린터 장치 개발을 위해 Windows 10 및 11의 인쇄 환경을 사용자 지정하는 것이 좋습니다.

자세한 내용은 인쇄 지원 앱 디자인 가이드를 참조하세요.

Unidrv 기반 및 Pscript5 기반 프린터 미니드라이버와 모놀리식 프린터 드라이버(IHV에서 완전히 개발한 드라이버)는 Microsoft Windows XP 이상에서 프린터 드라이버 버전 관리를 사용해야 합니다. Windows XP 이상 인쇄 스풀러는 버전 관리 정보를 사용하여 새 운영 체제 버전 또는 서비스 팩을 설치하는 동안 또는 새 Point 및 Print 연결이 설정된 경우 올바른 드라이버 파일을 선택할 수 있도록 합니다.

Windows 2000 또는 이전 NT 기반 운영 체제 버전에서는 프린터 드라이버 버전 관리가 지원되지 않습니다. 이러한 운영 체제 버전에서 인쇄 스풀러는 파일의 타임스탬프에서만 특정 드라이버 파일을 바꿀지 여부를 결정합니다. 최신 날짜가 있는 파일에 이전 기능 집합이 있을 수 있더라도 항상 이전 파일에 대한 기본 설정으로 최신 파일이 선택됩니다. 파일 날짜를 쉽게 변경할 수 있으므로 스풀러가 선택한 파일에서 올바른 선택을 하지 못할 수 있습니다.

올바른 버전의 드라이버 파일이 설치되었는지 확인하려면 해당 파일에 버전 번호를 추가하기만 하면 됩니다. pdrvver.h(Windows 드라이버 키트와 함께 제공되는)를 약간 수정하고 프린터 드라이버 DLL 리소스 파일에 해당 파일을 포함하여 이 작업을 수행할 수 있습니다. INF 기반 설치를 사용하여 모놀리식 드라이버를 설정하는 것은 이전 DLL에 최신 타임스탬프가 있을 수 있더라도 최신 DLL을 이전 DLL에서 덮어쓰지 않기 때문에 드라이버 버전 관리의 이점도 있습니다.

pdrvver.h 헤더는 거의 전적으로 전처리기 #define 지시문으로 구성됩니다. 수정해서는 안 되는 처음 두 VER_FILETYPE 및 VER_FILESUBTYPE 파일이 드라이버, 특히 프린터 드라이버의 리소스 파일임을 나타냅니다. VER_FILETYPE 및 VER_FILESUBTYPE 함께 표시되는 상수 VFT_DRV 및 VFT2_DRV_VERSIONED_PRINTER VS_FIXEDFILEINFO 구조에 설명되어 있습니다. 변경해야 하는 항목은 마지막 4개이며 다음과 같습니다.

VER_FILEVERSION

이 상수는 쉼표로 구분된 4개의 WORD 값 시퀀스로 설정해야 합니다. 세 번째 및 네 번째 WORD는 각각 VS_FIXEDFILEINFO 구조체의 dwFileVersionLS 멤버의 높음 및 하위 WORD를 설정하는 데 사용됩니다.

4개의 WORD 각각에 대한 의미는 아래에 설명되어 있습니다.

첫 번째 WORD

예약되어 있습니다. 이 값은 0으로 설정해야 합니다.

두 번째 단어

드라이버의 주 버전을 나타냅니다. 사용자 모드 드라이버의 경우 0x0003 설정합니다. 커널 모드 드라이버의 경우 0x0002 설정합니다.

세 번째 단어

높고 낮은 바이트가 있는 기능 집합 번호를 나타냅니다.

높은 바이트

주요 기능 집합 릴리스를 나타냅니다. 최신 릴리스에는 이전 릴리스의 기능 중 상위 집합이 있는 것으로 간주됩니다. 새 주 릴리스마다 이 값을 증분합니다.

Windows XP 이상에서 실행되는 Unidrv 및 Pscript5 기반 미니드라이버(Windows 업데이트 및 서비스 팩 포함)의 경우 0x05 설정해야 합니다.

낮은 바이트

동일한 코드 베이스 또는 아키텍처의 새 릴리스인 부 기능 집합 릴리스를 나타냅니다. 새 부 릴리스마다 이 값을 증분합니다.

다음 운영 체제 릴리스에서 실행되는 Unidrv 및 Pscript5 기반 미니드라이버의 경우 다음과 같이 이 바이트를 설정해야 합니다.

  • Windows XP: 0x01.

  • 첫 번째 Windows XP 서비스 팩: 0x01. (특정 버그 수정 번호는 네 번째 WORD에 나타납니다.)

  • 첫 번째 Windows 업데이트: 를 0x02.

네 번째 단어

버그 수정 또는 서비스 팩 릴리스를 나타냅니다. 버그 수정 또는 서비스 팩의 컬렉션인 경우 새 이진 파일 릴리스 시 이 값을 증분합니다.

모놀리식 드라이버 예제는 다음과 같습니다.

#define VER_FILEVERSION    0, 3, 0X0100, 0X0002

순서대로 왼쪽에서 오른쪽으로 첫 번째 WORD 값은 0이어야 합니다. 두 번째 WORD의 값은 3이며 이는 사용자 모드 드라이버임을 나타냅니다. 세 번째 WORD에서 높은 바이트 값(0X01)은 이것이 첫 번째 주 릴리스임을 나타내며, 동일한 WORD(0x00)의 낮은 바이트는 지금까지 부 릴리스가 없음을 나타냅니다. 네 번째 WORD(0x0002)는 이것이 두 번째 버그 수정 또는 서비스 팩 릴리스임을 나타냅니다. (이러한 릴리스 유형은 구분되지 않습니다.)

다음은 몇 가지 Unidrv-/Pscript5 기반 미니드라이버 예제입니다.

#define VER_FILEVERSION    0, 3, 0X0501, 0X0001

순서대로 왼쪽에서 오른쪽으로 첫 번째 WORD 값은 이전과 같이 0입니다. 두 번째 WORD의 값은 3이며 이는 사용자 모드 드라이버임을 나타냅니다. 세 번째 WORD에서 높은 바이트 및 낮은 바이트 값(각각 0X05 및 0x01)은 이 값이 Windows XP용 릴리스임을 나타냅니다. 네 번째 WORD(0x0001)는 이것이 첫 번째 버그 수정 또는 서비스 팩 릴리스임을 나타냅니다.

#define VER_FILEVERSION    0, 3, 0X0502, 0X0000

이전과 마찬가지로 첫 번째 WORD는 0이고 두 번째 WORD는 이것이 사용자 모드 미니드라이버임을 나타냅니다. 세 번째 WORD(0x0502)는 Windows XP 이후 릴리스된 첫 번째 Windows 업데이트 버전임을 나타냅니다. 네 번째 WORD(0x0000)는 버그 수정이나 서비스 팩 릴리스가 아님을 나타냅니다.

VER_FILEDESCRIPTION_STR

이 상수는 다음 예제와 같이 드라이버를 식별하는 이름으로 설정해야 합니다.

#define VER_FILEDESCRIPTION_STR    "Sample Printer Driver Resource DLL"

VER_INTERNALNAME_STR

이 상수를 다음 예제와 같이 파일의 내부 이름(경로 포함 안 됨)을 지정하는 이름으로 설정합니다.

#define VER_INTERNALNAME_STR    "SAMPLERES.DLL"

VER_ORIGINALFILENAME_STR

이 상수를 다음 예제와 같이 파일의 원래 이름(경로 포함 안 됨)을 지정하는 이름으로 설정합니다.

#define VER_ORIGINALFILENAME_STR    "SAMPLERES.DLL"