Yazıcı sürücüsü sürüm denetimi

Önemli

Modern yazdırma platformu, Windows'un yazıcılarla iletişim kurmak için tercih ettiği araçlardır. Yazıcı cihazı geliştirme için Windows 10 ve 11'deki yazdırma deneyimini özelleştirmek için Yazdırma Desteği Uygulamaları (PSA) ile birlikte Microsoft'un IPP gelen kutusu sınıf sürücüsünü kullanmanızı öneririz.

Daha fazla bilgi için bkz. Yazdırma Desteği Uygulaması v1 ve v2 tasarım kılavuzu.

Unidrv tabanlı ve Pscript5 tabanlı yazıcı mini sürücülerinin yanı sıra monolitik yazıcı sürücüleri (tamamen bir IHV tarafından geliştirilen sürücüler), Microsoft Windows XP ve sonraki sürümlerde yazıcı sürücüsü sürümünü kullanmalıdır. Windows XP ve sonraki yazdırma biriktiricisi, yeni bir işletim sistemi sürümünün veya hizmet paketinin yüklenmesi sırasında veya yeni bir Nokta ve Yazdırma bağlantısı kurulduğunda doğru sürücü dosyalarını seçmesini sağlamak için sürüm oluşturma bilgilerini kullanır.

Yazıcı sürücüsü sürüm oluşturma, Windows 2000 veya önceki NT tabanlı işletim sistemi sürümlerinde desteklenmez. İşletim sistemi sürümlerinde, yazdırma biriktiricisi belirli bir sürücü dosyasının değiştirilip değiştirilmeyeceğine dair kararını yalnızca dosyanın zaman damgasına bağlı olarak verir. Daha yeni bir tarihe sahip dosya eski özellik kümesine sahip olsa bile, daha yeni bir dosya her zaman eski bir dosyaya tercih edilir. Bir dosyanın tarihini değiştirmek çok kolay olduğundan, bu, biriktiricinin seçtiği dosyalarda doğru seçimi yapmasını engelleyebilir.

Sürücü dosyalarınızın doğru sürümlerinin yüklendiğinden emin olmak için bu dosyalara sürüm numaraları eklemeniz yeterlidir. Bunu yapmak için pdrvver.h dosyasında (Windows Driver Kit ile birlikte gelen) küçük değişiklikler yapabilir ve bu dosyayı yazıcı sürücüsü DLL kaynak dosyanıza ekleyebilirsiniz. Inf tabanlı yükleme kullanarak monolitik bir sürücü ayarlamak da sürücü sürümü oluşturmanın avantajını sağlar çünkü eski DLL'nin daha yeni bir zaman damgası olsa bile eski DLL'nin üzerine yeni bir DLL yazılmaz.

pdrvver.h üst bilgisi neredeyse yalnızca önişlemci #define yönergelerinden oluşur. değiştirilmemesi gereken ilk ikisi olan VER_FILETYPE ve VER_FILESUBTYPE, dosyanın bir sürücü için bir kaynak dosyası, özellikle de yazıcı sürücüsü olduğunu gösterir. VER_FILETYPE ve VER_FILESUBTYPE ile birlikte görünen VFT_DRV ve VFT2_DRV_VERSIONED_PRINTER sabitleri VS_FIXEDFILEINFO yapısında açıklanmıştır. Değiştirmeniz gerekenler, aşağıdakiler olan son dört tanedir:

VER_FILEVERSION

Bu sabit, virgülle ayrılmış dört WORD değerinden oluşan bir diziye ayarlanmalıdır. Üçüncü ve dördüncü WORD'ler, VS_FIXEDFILEINFO yapısının dwFileVersionLS üyesinin sırasıyla yüksek ve düşük WORD'lerini ayarlamak için kullanılır.

Dört WORD'un her birinin anlamı aşağıda açıklanmıştır.

İlk SÖZCÜK

Rezerve Edildi Bu değer 0 olarak ayarlanmalıdır.

İkinci SÖZCÜK

Sürücünün ana sürümünü temsil eder. Kullanıcı modu sürücüleri için bunu 0x0003 olarak ayarlayın. Çekirdek modu sürücüleri için bunu 0x0002 olarak ayarlayın.

Üçüncü SÖZCÜK

Özellik kümesi numarasını yüksek ve düşük baytla temsil eder.

Yüksek bayt

Önemli bir özellik kümesi sürümünü temsil eder. Daha yeni bir sürümün, önceki sürümün işlevselliğinin üst kümesine sahip olduğu varsayılır. Her yeni ana sürümle bu değeri artırın.

Windows Güncelleştirmeleri ve Hizmet Paketleri dahil olmak üzere Windows XP ve sonraki sürümlerde çalışan Unidrv ve Pscript5 tabanlı minidriver'lar için bu, 0x05 olarak ayarlanmalıdır.

Düşük bayt

Aynı kod tabanından veya mimariden yeni bir sürüm olan küçük bir özellik kümesi sürümünü temsil eder. Her yeni küçük sürümle bu değeri artırın.

Aşağıdaki işletim sistemi sürümlerinde çalışan Unidrv ve Pscript5 tabanlı minidriver'lar için bu bayt gösterildiği gibi ayarlanmalıdır:

  • Windows XP: 0x01 olarak ayarlayın.

  • İlk Windows XP Hizmet Paketi: 0x01 olarak ayarlayın. (Özel hata düzeltme numarası dördüncü WORD'de görünür.)

  • İlk Windows Update: 0x02 olarak ayarlayın.

Dördüncü SÖZCÜK

Bir hata düzeltmesi veya hizmet paketi sürümünü temsil eder. Hata düzeltmeleri veya hizmet paketi koleksiyonu olduğunda yeni bir ikili dosya yayınlandığında bu değeri arttırın.

Monolitik bir sürücü örneği aşağıda verilmiştir:

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

Sırayla, soldan sağa, ilk WORD değeri sıfırdır ve bu değer olmalıdır. İkinci WORD değerinin üç olması, bunun bir kullanıcı modu sürücüsü olduğunu gösterir. Üçüncü WORD'de, yüksek bayt değeri (0X01) bunun ilk ana sürüm olduğunu belirtir ve aynı WORD'ün (0x00) düşük bayt değeri şu ana kadar küçük sürüm olmadığını gösterir. Dördüncü WORD (0x0002), bunun ikinci hata düzeltmesi veya hizmet paketi sürümü olduğunu gösterir. (Bu tür sürümler arasında ayrım yapılmaz.)

Burada bazı Unidrv/Pscript5 tabanlı minidriver örnekleri verilmiştir:

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

Sırayla, soldan sağa, ilk WORD değeri önceki gibi sıfırdır. İkinci WORD değerinin üç olması, bunun bir kullanıcı modu sürücüsü olduğunu gösterir. Üçüncü WORD'de, yüksek bayt ve düşük bayt değerleri (sırasıyla 0X05 ve 0x01), bunun Windows XP için bir sürüm olduğunu belirtir. Dördüncü WORD (0x0001), bunun ilk hata düzeltmesi veya hizmet paketi sürümü olduğunu gösterir.

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

Daha önce olduğu gibi, ilk WORD sıfırdır ve ikinci WORD bunun bir kullanıcı modu minidriver olduğunu gösterir. Üçüncü WORD (0x0502), bunun Windows XP'nin ardından yayımlanan ilk Windows Update sürümü olduğunu gösterir. Dördüncü WORD (0x0000) bunun bir hata düzeltmesi veya hizmet paketi sürümü olmadığını gösterir.

DOSYA_AÇIKLAMASI_STR

Bu sabit, aşağıdaki örnekte olduğu gibi sürücüyü tanımlayan bir ada ayarlanmalıdır.

#define VER_FILEDESCRIPTION_STR    "Sample Printer Driver Resource DLL"

VER_INTERNALNAME_STR

Bu sabiti, aşağıdaki örnekte olduğu gibi dosyanın iç adını (yol dahil değil) belirten bir ad olarak ayarlayın.

#define VER_INTERNALNAME_STR    "SAMPLERES.DLL"

VER_ORIGINALFILENAME_STR

Bu sabiti, aşağıdaki örnekte olduğu gibi dosyanın özgün adını (yol dahil değil) belirten bir ad olarak ayarlayın.

#define VER_ORIGINALFILENAME_STR    "SAMPLERES.DLL"