WDM プリンタINFファイル解析一般 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(印刷機能 """)
 
1行: 1行:
 +
[[Windows Driver Model]]に戻る
 
== '''概要''' ==
 
== '''概要''' ==
 
 WDM プリンタインストールの解析記事です。最近はPrinterってPDFに出力するだけだったりすることも多いですが、そういったプリンタのインストールってどんな感じの動きをするのかを知るのがこの記事になります。管理人程度の知識ではさほど解析できないと思いますが、まずはやってみましょう。
 
 WDM プリンタインストールの解析記事です。最近はPrinterってPDFに出力するだけだったりすることも多いですが、そういったプリンタのインストールってどんな感じの動きをするのかを知るのがこの記事になります。管理人程度の知識ではさほど解析できないと思いますが、まずはやってみましょう。
178行: 179行:
 
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ClientSideRender disabled
 
rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ClientSideRender disabled
 
</syntaxhighlight2>
 
</syntaxhighlight2>
 +
 +
上記の内、通常のプリンタインストールでよく使うオプションは
 +
 +
*/if
 +
:inf ファイルを使ってプリンターをインストール。
 +
*/b [名前]
 +
: 基本プリンター名。
 +
*/f [ファイル]
 +
:inf ファイルまたは出力ファイル
 +
*/r [ポート]
 +
:ポート名
 +
*/m [モデル]
 +
:プリンター ドライバー モデル名
 +
 +
 +
===''' infファイル '''===
 +
 上記のようなプリンタインストールコマンドがありますが、結局のところ、infファイルに記述される一連のインストール情報に従って、プリンタシステムが構築されているようです。
 +
 +
 +
 どういう風にプログラム群を配置するとpdfのようなプリンタ出力システムが構築されるのかを確認します。個々のプログラムファイルの作り方はもう少し難しいと思うので、まずは、どんなふうにファイルが配置されるのかをinfファイルの理解と共に知っていこうと思います。
 +
 +
 +
 まずはPaperPortインストールのテキストファイルがどうなっているかを見てみます。
 +
 +
 +
<syntaxhighlight2 lang="INI" line=1>
 +
;
 +
; @file NuanPrint.inf for 32 and 64Bit System
 +
;
 +
[Version]
 +
Signature="$Windows NT$"
 +
Provider=%AUTHOR%
 +
LayoutFile=ntprint.inf
 +
ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}
 +
Class=Printer
 +
 +
; Date & version of driver package
 +
DriverVer=05/12/2006,1.0.0.0
 +
;
 +
; Manufacturer section
 +
;
 +
[Manufacturer]
 +
"Scansoft" = Scansoft,NTamd64
 +
 +
;
 +
; Model Sections
 +
;
 +
; These sections correspond with an entry listed in the
 +
; [Manufacturer] section above. The models will be displayed in the order
 +
; that they appear here.
 +
;
 +
[Scansoft]
 +
"PaperPort Image Printer" = Nuan.gpd
 +
 +
[Scansoft.NTamd64]
 +
"PaperPort Image Printer" = Nuan.gpd
 +
 +
;
 +
; Installer Sections
 +
;
 +
; These sections control file installation, and reference all files that
 +
; need to be copied. The section name will be assumed to be the driver data
 +
; file, unless there is an explicit DataFile section listed.
 +
;
 +
[Nuan.gpd]
 +
CopyFiles=@Nuan.gpd,@NuanPrn.ini,DLLFILES
 +
DataSection=UNIDRV_DATA
 +
DataFile=Nuan.gpd
 +
Include=NTPRINT.INF
 +
Needs=UNIDRV.OEM,UNIDRV_DATA
 +
 +
;
 +
; Copy Sections
 +
;
 +
[DLLFILES]
 +
NuanUNI.DLL
 +
NuanUI.DLL
 +
Nuanoemuires.dll
 +
NuanImageConvert.exe
 +
 +
;
 +
; Data Sections
 +
;
 +
; These sections contain data that is shared between devices.
 +
;
 +
 +
;
 +
; Call SetupSetDirectoryId with 66000 to set the target directory at runtime
 +
; (depending on which environment drivers are getting installed)
 +
;
 +
[DestinationDirs]
 +
DefaultDestDir=66000
 +
 +
;
 +
; diskid = description,tagfile,unused,subdir
 +
;
 +
 +
[SourceDisksFiles.x86]
 +
Nuanuni.dll    = 1,,,,,,,11,\i386
 +
Nuanui.dll      = 1,,,,,,,11,\i386
 +
Nuanoemuires.dll= 1,,,,,,,11,\i386
 +
NuanImageconvert.exe= 1,,,,,,,11,\i386
 +
[SourceDisksFiles.amd64]
 +
Nuanuni.dll    = 1,,,,,,,11,\amd64
 +
Nuanui.dll      = 1,,,,,,,11,\amd64
 +
Nuanoemuires.dll= 1,,,,,,,11,\amd64
 +
NuanImageconvert.exe= 1,,,,,,,11,\amd64
 +
;
 +
; Localizable Strings
 +
;
 +
[Strings]
 +
AUTHOR="Scansoft wintone"
 +
 +
</syntaxhighlight2>
 +
 
 +
===''' INFファイルの読み解き'''===
 +
 マイクロソフトの公式の解説は[https://docs.microsoft.com/ja-jp/windows-hardware/drivers/install/overview-of-inf-files#:~:text=INF%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AF%E3%80%81%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BC%E3%81%AE,%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E3%81%99%E3%80%82 公式解説]で記載されています。公式解説。正直エグイほど、ややこしいけど適格な情報。管理人のような素人には太刀打ちできない難しさがあります。プリンタインストールだけに限ればこれほど膨大な情報は必要ないのかもしれない。ここでは最低限の理解から始めてみます。
 +
 +
 INFファイルはINIファイルともよくている構造になっています。両方に共通することもありそうです。まずはファイルの先頭あたりから理解していきます。
 +
 +
 +
==== ''' Version '''====
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">4行目:[Version]</span>
 +
: [Version]のような記述がタイトルのようになって表記されます。これをセクションと呼んでいます。区分ですね。たしかに、[Version]のような記述ごとに分けられて記述があるように感じます。納得できる。
 +
 +
 +
: その前に、行頭のセミコロン<span>(</span>;<span>)</span>とかは、コメントの記述に使われます。その行のセミコロンの後ろはコメントとして扱えるようです。行の途中からでもコメントが添えられますが、コメント化の打消しはできないので、;を入力したらINFコマンドの内容としては、その行はおしまいなのでしょう。
 +
 +
 +
: イコール<span>(</span>=<span>)</span>はプログラムで使われるものと同じ意味を持っていて、イコールの右側<span>(</span>右辺値<span>)</span>の値をイコールの左側<span>(</span>左辺値<span>)</span>のキーワードに代入あるいは関連付けるという動きをします。
 +
 +
 +
: INFファイルにおけるセクション名は変数のような意味を持つ場合があります。例えば、27行目の=の後ろNuan.gpdは39行目の[Nuan.gpd]の事を意味していて39行目の[Nuan.gpd]からのセクションの値をすべて27行目のNuan.gpdが指し示しています。27行目のNuan.gpdが"PaperPort Image Printer"という値だと指示しています。
 +
 +
 +
: INFファイルにおけるセクションはINIファイルよりも意味がある。
 +
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">5行目:Signature="\&#x24;WINDOWS NT\&#x24;"</span>
 +
: \$WINDOWS NT\$は何かのパスを指し示しいるわけではなく、署名はWINDOWS NTというすべてのシステムに対応する署名方式を使いますというお決まりの記述です。すべてのWindowsシステムで共通の値です。深く考える必要はないと思います。Signature="\&#x24;Chicago\&#x24;"でも同じ意味だそうですが、こちらの記述を使ったINFファイルを見かけたことはありません。
 +
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">6行目:Provider=%AUTHOR%</span>
 +
: Providerはドライバの製造元を表す文字列を指定します。Providerキーワードの右辺値は文字列を指定します。ダブルクォーテーションで囲った文字列をProvider="Scansoft wintone"のように指定しても良いですし、このinfファイルのように%AUTHOR%と指定して、AUTHORという変数の中身を製造元に指定するというやり方でも良いです。%AUTHOR%と指定した場合は、後に出てくる85行目の[Strings]セクションで、変数の中身を指定する必要があります。86行目でAUTHOR="Scansoft wintone"という記述で文字列変数のようにAUTHORキーワードに文字列を紐づけることができます。
 +
 +
 +
: 製造元情報はプリンタインストール後にもプリンタのプロパティとして参照できる値ですので、この仕組みを実現するためにあると思われます。マイクロソフトが製造元の場合はProvider=%msft%と指定され、[Strings]セクションでmsft="microsoft"と指定されるような構造になっているのを見かけます。
 +
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">7行目:LayoutFile=ntprint.inf</span>
 +
: LayoutFileは共通するINFファイルの情報を読み込んだりするためにあります。windows2000、windowsXPで使われていたようで、現在では使わないことが推奨されています。INCLUDEというキーワードでntprint.infを取り込むのが主流のようです。Windows10でもpaperportのプリンタインストールはうまく出来ているので、使えなくもない指定方法なのかなと感じます。公式の解説文書はあまり深く言及していない、謎だわぁ。LayoutFileはDisplayドライバのインストールをするときには利用することにはなっているみたいです。なので、[Version]セクションではLayoutFileの指定をせず、INCLUDEキーワードでntprit.infの読み込みを指定するのが正しいやり方のように感じます。それが証拠に45行目でもINCLUDE=NTPRINT.INFと指定されています。
 +
 +
 +
: ntprint.infって何?って感じですが、マイクロソフトユニバーサルプリンタドライバ (Unidrv) を意味していて、この共通の部品をインストールして、独自のドライバと併せて動かすことができます。
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">8行目:ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}</span>
 +
: ClassGUIDはINFファイルの属性を示すIDでPrinterドライバは上記のようなIDになります。わけのわからない数字と英字の連続に見えますが、GUID<span>(</span>Globally Unique Identifier<span>)</span>生成器を使えば100年間ずっと毎秒10億個発番しつづけても重複しないといわれている唯一のIDになっています。世界の人口の10人に1人が毎秒1個発番する専属の担当と指名されたとしても、休みなく発番しつづけても重複しないということです。専属の人なんているわけないし、10人に1人が発番しているなんていうことも考えられません。そうすると上記番号は、この世界における単一目的のために発番した唯一のIDで、このIDがprinterドライバを表すIDになっているということです。これだけ長い英数字でありながらprinterドライバなら同じように4D36E979-E325-11CE-BFC1-08002BE10318が指定されます。
 +
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">9行目:Class=printer</span>
 +
: このINFファイルの属性をあらわすキーワードでClass=printerならプリンタドライバであることを意味しています。
 +
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">12行目:DriverVer=05/12/2006,1.0.0.0</span>
 +
: INFファイルによってインストールされるドライバの更新日付とバージョン番号に関する情報です。例では、5月12日で2006年の更新日でバージョン番号としては1.0.0.0が付与されています。ドライバインストーラー自体は更新されることが少ないので、1.0.0.0のまま終わることも多いと思います。
 +
 +
 
 +
 +
==== ''' Manufacturer '''====
 +
<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">17行目:"Scansoft" = Scansoft,NTamd64</span>
 +
: 先述のAUTHORのように%MANURACTURERNAM%のように変数を記述して[Strings]セクションでその実態を%MANURACTURERNAM%="製造元名"として表記することができます。変数を使わずに直接、二重引用符で製造元名を記述しても良いです。ここでは"Scansoft"=となっているので二重引用符で製造元名を指定しています。右辺値にはプリンタモデルについて記載されるセクションの値を記入する必要があります。CPUのモデルやOSのバージョンによってプリンタモデルのセクションの適用箇所を自動的に判別して、必要なプリンタモデルを選択できる仕組みがあるため、製造元名=の右辺値は複雑な決まりがいくつかあります。次の段落では右辺値のメカニズムについてを簡単にまとめたものを記述します。
 +
 +
 +
 製造元名=に続く値は一つ以上のセクション名が必要ですが、セクション名と同一のセクションが後述のINFファイル内に存在しなくても良いです。無い場合は、すべてのCPUアーキテクチャーについてのセクションが必要となります。
 +
 +
 +
 セクション名と同じものを含む場合
 +
 +
 +
<syntaxhighlight2 lang="INI">
 +
[Manufacturer]
 +
"Scansoft" = Scansoft
 +
 +
[Scansoft]
 +
……
 +
……
 +
</syntaxhighlight2>
 +
 +
 +
 +
 右辺値がセクション名と同じものを含まない場合
 +
 +
 +
<syntaxhighlight2 lang="INI">
 +
[Manufacturer]
 +
"Scansoft" = Scansoft,NTx86,NTamd64,NTia64,NTarm,NTarm64
 +
 +
[Scansoft.NTx86]
 +
……
 +
[Scansoft.NTamd64]
 +
……
 +
[Scansoft.NTia64]
 +
……
 +
[Scansoft.NTarm]
 +
……
 +
[Scansoft.NTarm64]
 +
……
 +
</syntaxhighlight2>
 +
 +
 +
 上記のように対応するアーキテクチャーすべてについてのセクションが無いとすべてのWindowsシステムへのドライバインストールを網羅はできません。共通のインストール処理で問題ない場合は、上記の例で[Scansoft]というセクションを配置して、セクションの中で必要なドライバインストール指示を記述します。
 +
 +
 +
 アーキテクチャは以下のように分類されます。
 +
<ytmath>
 +
<style>
 +
table td {
 +
background: #eee;
 +
        padding-left:10px;
 +
}
 +
table tr:nth-child(odd) td {
 +
background: #fff;
 +
}
 +
</style>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">アーキテクチャ略称</span></td><td align=left><span style="font-weight: bold;">説明</span></td></tr>
 +
<tr><td align=right>x86</td><td align=left>intel x86 32bitアーキテクチャ<span>(</span>amd製も含まれる<span>)</span></td><tr><td align=right>amd64</td><td align=left>amd x64 64bitアーキテクチャ<span>(</span>32bit互換/Intel製も含まれる<span>)</span><tr><td align=right>ia64</td><td align=left>Intel Itanium64bitアーキテクチャ</td></tr>
 +
<tr><td align=right>arm</td><td align=left>arm 32bitアーキテクチャ</td></tr>
 +
<tr><td align=right>arm64</td><td align=left>arm 64bitアーキテクチャ</td></tr>
 +
</table>
 +
</ytmath>
 +
 +
 +
 amd64アーキテクチャーが今の流行りだと思います。CPUと聞くとIntelなイメージがありますが命令セット名はamd64という名前がついています。Intel Core i3/i5/i7 IntelAtomプロセッサもamd64です。サーバ側はiaなのでIntelという意味がねじ込んでありますが、i3/i5/i7 IntelAtomプロセッサがamd64命令セットであるのはIntelにとっては気持ちのいいものではないのかもしれません。やるなAMD<span>(</span>アドバンストマイクロデバイセズ<span>)</span>
 +
 +
 +
 アーキテクチャーの下でさらに細分化してセクションを分類できます。
 +
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows version</span></td><td align=left><span style="font-weight: bold;">Major version</span></td></tr>
 +
<tr><td align=right>Windows 10</td><td align=left>10</td></tr>
 +
<tr><td align=right>Windows Server 2012 R2</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows 8.1</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Server 2012</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows 8</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Server 2008 R2</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows 7</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Server 2008</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Vista</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Server 2003 R2</td><td align=left>5</td></tr>
 +
<tr><td align=right>Windows Server 2003</td><td align=left>5</td></tr>
 +
<tr><td align=right>Windows XP</td><td align=left>5</td></tr>
 +
<tr><td align=right>Windows 2000</td><td align=left>5</td></tr>
 +
</table>
 +
</ymath> 
 +
 +
Windows Client
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows version</span></td><td align=left><span style="font-weight: bold;">Major version</span></td></tr>
 +
<tr><td align=right>Windows 10</td><td align=left>10</td></tr>
 +
<tr><td align=right>Windows 8.1</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows 8</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows 7</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Vista</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows XP</td><td align=left>5</td></tr>
 +
</table>
 +
</ymath> 
 +
 +
Windows Server
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows version</span></td><td align=left><span style="font-weight: bold;">Major version</span></td></tr>
 +
<tr><td align=right>Windows Server 2012 R2</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Server 2012</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Server 2008 R2</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Server 2008</td><td align=left>6</td></tr>
 +
<tr><td align=right>Windows Server 2003 R2</td><td align=left>5</td></tr>
 +
<tr><td align=right>Windows Server 2003</td><td align=left>5</td></tr>
 +
<tr><td align=right>Windows 2000</td><td align=left>5</td></tr>
 +
</table>
 +
</ymath>
 +
 +
 +
 Windowsのシステム名が変わるほどの変更で、あきらかに大きな変更なのに案外メジャーバージョンの番号って上がらない。実際は、マイナーバージョンまで記述して、やっとで思うような切り分けができそうな感じさえする。
 +
 +
 +
Windows Client
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows version</span></td><td align=left><span style="font-weight: bold;">Major version</span></td><td align=left><span style="font-weight: bold;">Minor version</span></td></tr>
 +
<tr><td align=right>Windows 10</td><td align=left>10</td><td align=left>0</td></tr>
 +
<tr><td align=right>Windows 8.1</td><td align=left>6</td><td align=left>3</td></tr>
 +
<tr><td align=right>Windows 8</td><td align=left>6</td><td align=left>2</td></tr>
 +
<tr><td align=right>Windows 7</td><td align=left>6</td><td align=left>1</td></tr>
 +
<tr><td align=right>Windows Vista</td><td align=left>6</td><td align=left>0</td></tr>
 +
<tr><td align=right>Windows XP</td><td align=left>5</td><td align=left>1</td></tr>
 +
</table>
 +
</ymath> 
 +
 +
Windows Server
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows version</span></td><td align=left><span style="font-weight: bold;">Major version</span></td><td align=left><span style="font-weight: bold;">Minor version</span></td></tr>
 +
<tr><td align=right>Windows Server 2012 R2</td><td align=left>6</td><td align=left>3</td></tr>
 +
<tr><td align=right>Windows Server 2012</td><td align=left>6</td><td align=left>2</td></tr>
 +
<tr><td align=right>Windows Server 2008 R2</td><td align=left>6</td><td align=left>1</td></tr>
 +
<tr><td align=right>Windows Server 2008</td><td align=left>6</td><td align=left>0</td></tr>
 +
<tr><td align=right>Windows Server 2003 R2</td><td align=left>5</td><td align=left>2</td></tr>
 +
<tr><td align=right>Windows Server 2003</td><td align=left>5</td><td align=left>2</td></tr>
 +
<tr><td align=right>Windows 2000</td><td align=left>5</td><td align=left>0</td></tr>
 +
</table>
 +
</ymath>
 +
 +
 +
 例えばWindows10ビルド19042.867に対応するセクションを作りたい場合は
 +
 +
<syntaxhighlight2 lang="INI">
 +
[Manufacturer]
 +
"ManufacturerID"=ManufacturerID,NTamd64.10.0...19042
 +
 +
[ManufacturerID.NTamd64.10.0...19042]
 +
……
 +
</syntaxhighlight2>
 +
 +
 のようにします。 右辺値に記述した値はモデル名として扱われます。まぁでも、INFファイルって意外に自動判定とかの機能が働くんすね。すごい。Windowsのバージョン番号とかアーキテクチャーをこんな簡単に判断するなんて、昔から高度な機能を実装してたんですね。
 +
 +
 
 +
 +
==== ''' Model Sections '''====
 +
 Manufacrurerの右辺値に設定したモデル名ごとのプリンタ設定を記述するセクションの指定をします。例では、2つのモデル名ScansoftとScansoft.NTamd64を指定しています。このセクションの中で設定する左辺値はプリンタドライバ名で右辺値はインストーラセクション名になります。モデル名で分岐したものが結局は同じインストーラセクション名になることがあります。今回の例でも、同じインストーラセクションになっています。
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">26行目:[Scansoft]</span>
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">27行目:"PaperPort Image Printer" = Nuan.gpd</span>
 +
: [Scansoft]セクションはCPUのアーキテクチャーamd64以外で適用される、OSの種類に関係なくアクティブになるセクションです。プリンタドライバ名はPaperport Image Printerで、その中身であるインストーラセクションはNuan.gpdセクションを参照するように設定しています。
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">26行目:[Scansoft.NTamd64]</span>
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">27行目:"PaperPort Image Printer" = Nuan.gpd</span>
 +
: [Scansoft.NTamd64]セクションも、[Scansoft]セクションと同じ設定になっています。
 +
 +
 +
: 例えば、Intel Atom プロセッサのWindows10はamd64アーキテクチャなので、[Scansoft.NTamd64]のセクション内容が適用されます。そうするとIntel AtomプロセッサのWindows10はここまでの設定で
 +
 +
[Versions]
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Var</span></td><td align=left><span style="font-weight: bold;">Value</span></td></tr>
 +
<tr><td align=right>  Signature</td><td align=left>"\$Windows NT\$"</td></tr>
 +
<tr><td align=right>  Provider</td><td align=left>"Scansoft"</td></tr>
 +
<tr><td align=right> LayoutFile</td><td align=left>ntprint.inf ; 無効な行</td></tr>
 +
<tr><td align=right>  ClassGUID</td><td align=left>{4D36E979-E325-11CE-BFC1-08002BE10318}</td></tr>
 +
<tr><td align=right>      Class</td><td align=left>Printer</td></tr>
 +
<tr><td align=right>      DriverVer</td><td align=left>05/12/2006,1.0.0.0</td></tr>
 +
</table>
 +
</ymath>
 +
 +
 +
[Manufacturer]
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Var</span></td><td align=left><span style="font-weight: bold;">Value</span></td></tr>
 +
<tr><td align=right>  "Scansoft" </td><td align=left>Scansoft,NTamd64 ; [Scansoft.NTamd64]</td></tr>
 +
</table>
 +
</ymath>
 +
 +
 +
[Scansoft.NTamd64]
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Var</span></td><td align=left><span style="font-weight: bold;">Value</span></td></tr>
 +
<tr><td align=right>  "PaperPort Image Printer" </td><td align=left>Nuan.gpd</td></tr>
 +
</table>
 +
</ymath>
 +
 +
 +
: のように設定されたことになります。
 +
 +
==== ''' Installer Sections '''====
 +
 Manufacrurerの右辺値に設定したモデル名ごとのプリンタ設定を記述するセクションの指定をします。例では、2つのモデル名ScansoftとScansoft.NTamd64を指定しています。このセクションの中で設定する左辺値はプリンタドライバ名で右辺値はインストーラセクション名になります。モデル名で分岐したものが結局は同じインストーラセクション名になることがあります。今回の例でも、同じインストーラセクションになっています。
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">39行目:[Nuan.gpd]</span>
 +
 +
: Model Sectionsで指定した[Nuan.gpd]というセクションでInstallに必要な情報記述するインストーラセクションの情報を記述します。
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">40行目:CopyFiles=@Nuan.gpd,@NuanPrn.ini,DLLFILES</span>
 +
 +
: インストーラセクション中の左辺値CopyFilesはインストールドライバ元で用意したファイルの内コピーするファイルを右辺値で指定します。@マークがついている名称はファイルの実体そのものの名称であることを示していて、変数とかではないことを意味しています。例でいうと、ドライバのINFファイルがあるディレクトリと同じ階層にNuan.gpdとNuanPrn.iniがあることを意味していて、これらをコピーすることを意味しています。@マークのついていないDLLFILESは[DLLFILES]というセクションで個別にコピーするファイルを指定することを意味しています。
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">41行目:DataSection=UNIDRV_DATA</span>
 +
 +
: インストーラセクション中の左辺値DataSectionは各種プリンタで共通するインストールドライバを読み込むために指定します。マイクロソフトINFプリンタNtprint.infでは3つの有効なドライバセクションが存在しています。
 +
 
 +
 +
Microsoft's DataSection
 +
<ymath>
 +
<table border=0>
 +
<tr><td align=right><span style="font-weight: bold;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSection</span></td><td align=left><span style="font-weight: bold;">Value</span></td></tr>
 +
<tr><td align=right>UNIDRV_DATA</td><td align=left>■共通プリンタードライバ<br />・Driverファイル<br />・Configファイル<br />・Help
 +
ファイル<br />の値を割り当てる</td></tr>
 +
<tr><td align=right>PSCRIPT_DATA</td><td align=left>■ポストスクリプトプリンタードライバ<br />・Driverファイル<br />・Configファイル<br />・Help
 +
ファイル<br />の値を割り当てる</td></tr>
 +
<tr><td align=right>UNIDRV_BIDI_DATA</td><td align=left>■双方向プリンターの場合<br />Microsoftユニバーサル プリンター ドライバー<br />・Driverファイル<br />・Configファイル<br />・Help
 +
ファイル<br />・言語モニターエントリ<br />の値を割り当てる</td></tr>
 +
</table>
 +
</ymath>
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">42行目:DataFile=Nuan.gpd</span>
 +
 +
: インストーラセクション中の左辺値DataFileはドライバーに関連付けられたデータファイルの名前 <span>(</span>GPD、PPD ファイルなど<span>)</span>を指定します。GPD<span>(</span>Generic Printer Description<span>)</span>ファイルやPPD<span>(</span>PostScript Printer Description<span>)</span>ファイル自体も記述する項目に決まりのあるドライバデータとなっています。[https://docs.microsoft.com/ja-jp/windows-hardware/drivers/print/introduction-to-gpd-files GPDファイル概要]、[https://docs.microsoft.com/ja-jp/samples/microsoft/windows-driver-samples/oem-printer-customization-plug-in-samples/ OEMプリンタカスタムGPDサンプル]、[https://docs.microsoft.com/ja-jp/samples/microsoft/windows-driver-samples/print-auto-configuration-sample/ プリンタ設定GPDサンプル]はこちらの手順で取得できます。[https://www.cups.org/doc/postscript-driver.html PPDファイル開発]はこちらが詳しいでしょうか。難しいですけど。
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">43行目:Include=NTPRINT.INF</span>
 +
 +
: インストーラセクション中の左辺値Includeは追加のシステム提供のINFファイルを指定します。 このエントリを指定すると、通常はNeedsエントリも指定されます。NTPRINT.INFを指定することが多いでしょう。
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">44行目:Needs=UNIDRV.OEM,UNIDRV_DATA</span>
 +
 +
: インストーラセクション中の左辺値Needsは、追加のシステム提供のINFファイルから取り込むセクションを指定します。例の場合、NTPRINT.INFから[UNIDRV.OEM]セクションと[UNIDRV_DATA]セクションを取り込むことを意味しています。
 +
 
 +
 
 +
==== ''' Copy Sections '''====
 +
 InstallセクションのCopyFilesでファイル名そのものではなく、セクションを指定したときの個別のファイル名を記述するセクションです。
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">49行目:[DLLFILES]</span>
 +
: DLLFILESは任意でつけられた名前ですが、InstallSectionsのCopyFilesの中で@無しの名前としてファイルをセクションで指定することを意図したものです。このセクションには、セクション名以降でファイル名を1行1ファイルで羅列します。
 +
 +
 
 +
 +
==== ''' [DestinationDirs] '''====
 +
 ファイルのコピー先を指定する部分です。DefaultDestDir=66000は既定の配布先を指定するもので66000はプリンタドライバの配置をする既定のディレクトリ名を示します。番号が特定のディレクトリ名を保持していて、この番号によるディレクトリ名指定の管理はかなりの数が登録されています。66000はGetPrinterDriverDirectoryというAPIを実行して返却される値です。diridと呼ばれています。Windows10のamd64アーキテクチャーの場合はC:\Windows\System32\spool\drivers\x64が返ってきます。[https://docs.microsoft.com/ja-jp/windows-hardware/drivers/install/using-dirids dirid]についてはリンク先に記述があります。
 +
 +
 +
 エクセルがあれば、以下のコードを[[VBA]]のエディタに張り付けてGetPrnterDriverDirectoryの内容を確かめることができます。
 +
<syntaxhighlight2 lang="VB">
 +
Declare PtrSafe Function BeepAPI Lib "kernel32.dll" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
 +
Declare PtrSafe Function GetPrinterDriverDirectory Lib "winspool.drv" Alias "GetPrinterDriverDirectoryA" _
 +
  (ByVal pName As String, _
 +
  ByVal pEnvironment As String, _
 +
  ByVal level As Long, _
 +
  ByVal pDriverDirectory As String, _
 +
  ByVal cbBuff As Long, _
 +
  pcbNeeded As Long) As Long
 +
 +
Sub GetDir()
 +
  Dim level As Long
 +
  Dim cbBuff As Long
 +
  Dim pcbNeeded As Long
 +
  Dim pName As String
 +
  Dim pEnvironment As String
 +
  Dim pDriverDirectory As String
 +
 
 +
  level = 1    'must be 1
 +
  cbBuff = 0  'must be 0 initially
 +
  pDriverDirectory = vbNullString  'must be null string initially
 +
 
 +
  pName = vbNullString
 +
 
 +
  pEnvironment = vbNullString
 +
 
 +
  If GetPrinterDriverDirectory(pName, _
 +
                                pEnvironment, _
 +
                                level, _
 +
                                pDriverDirectory, _
 +
                                cbBuff, _
 +
                                pcbNeeded) = 0 Then
 +
      '1回目の呼び出しでは返却で必要な文字数を返すために呼び出します。
 +
      '最初はディレクトリ値は得られません。
 +
 +
      pDriverDirectory = Space$(pcbNeeded)
 +
      cbBuff = Len(pDriverDirectory)
 +
       
 +
      If GetPrinterDriverDirectory(pName, _
 +
                                  pEnvironment, _
 +
                                  level, _
 +
                                  pDriverDirectory, _
 +
                                  cbBuff, _
 +
                                  pcbNeeded) = 1 Then
 +
        '2回目の呼び出しでは返却で必要な文字数設定して呼び出しているので
 +
        'ディレクトリ値が得られます。
 +
                                       
 +
        Debug.Print Left$(pDriverDirectory, pcbNeeded)
 +
        '取得できた値がイミディエイトウィンドウに表示されます。
 +
      End If
 +
  End If
 +
End Sub
 +
 +
 +
 +
</syntaxhighlight2>
 +
 +
 
 +
 +
==== ''' [SourceDisksFiles] '''====
 +
 [SourceDisksFiles]は[SourceDisksFiles.amd64]のようにアーキテクチャー情報が付加されたものを対象にすることができます。この欄で先述したCopyFileセクションで記載したファイル一つ一つの詳細情報を記述する部分です。ファイルがどこにあるのかといた情報をつけ足します。たとえINFファイルと同じ位置にあったとしても、ディレクトリの位置がどこなのかを明示する必要があります。
 +
 +
 +
*<span style = "background:linear-gradient(transparent 75%, #ff7f7f 75%); font-weight:bold; ">78行目:DNuanuni.dll    = [1]1<span>(</span>=diskid<span>)</span>,[2]<span>(</span>=subdir<span>)</span>,[3]<span>(</span>upgradecode<span>)</span>,[4]<span>(</span>newinstallcode<span>)</span>,[5]<span>(</span>spare<span>)</span>,[6]<span>(</span>spare<span>)</span>,[7]<span>(</span>newfilename<span>)</span>,11<span>(</span>=diskid<span>)</span>,\amd64<span>(</span>=subidir<span>)</span></span>
 +
: これを紐解くのは難しい。なんで1の後ろにカンマ7つもあるん?コレって感じです。1と11を先述したdiridで1はINFファイルがあるInstalFileドライブを意味しています。11はC:¥Windows¥System32です。WindowsディレクトリはほとんどのPCで共通ですが、名前を変更することもできるので、11が同じ役割のフォルダという風に紐づけられています。diridはややこしいけど、プリンタドライバをインストールする技術としては必要不可欠な便利なシステムです。
 +
 +
 +
: カンマ7つは別の意味をもっています。[1]diskid, [2]subdir, [3]upgradecode, [4]newinstallcode, [5]spare, [6]spare, [7]newfilename
 +
 +
 
 +
 +
=== ''' NTPRINT.INI '''===
 +
 ntprint.iniの中身は以下のようになっています。
 +
<syntaxhighlight2 lang="INI" line=1>
 +
 +
;
 +
; NTPRINT.INF - Microsoft Windows Core Printer Driver Package
 +
;
 +
 +
[Version]
 +
Signature="$Windows NT$"
 +
Provider="Microsoft"
 +
ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}
 +
Class=Printer
 +
CatalogFile=ntprint.cat
 +
DriverIsolation=2
 +
DriverVer = 06/21/2006,10.0.18362.1198
 +
 +
[Manufacturer]
 +
"Microsoft"=Microsoft,NTx86,NTAMD64,NTIA64,NTARM,NTARM64
 +
 +
[Microsoft.NTx86]
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F0}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F0}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F1}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F1}, {D20EA372-DD35-4950-9ED8-A6335AFE79F1}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F2}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F2}, {D20EA372-DD35-4950-9ED8-A6335AFE79F2}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F3}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F3}, {D20EA372-DD35-4950-9ED8-A6335AFE79F3}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F5}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F5}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
 +
 +
[Microsoft.NTAMD64]
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F0}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F0}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F1}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F1}, {D20EA372-DD35-4950-9ED8-A6335AFE79F1}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F2}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F2}, {D20EA372-DD35-4950-9ED8-A6335AFE79F2}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F3}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F3}, {D20EA372-DD35-4950-9ED8-A6335AFE79F3}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F5}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F5}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
 +
 +
[Microsoft.NTIA64]
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F0}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F0}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F1}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F1}, {D20EA372-DD35-4950-9ED8-A6335AFE79F1}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F2}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F2}, {D20EA372-DD35-4950-9ED8-A6335AFE79F2}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F3}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F3}, {D20EA372-DD35-4950-9ED8-A6335AFE79F3}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F5}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F5}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
 +
 +
[Microsoft.NTARM]
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F0}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F0}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F5}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F5}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
 +
"{B552DDF8-2832-417f-B1D3-B99D8E62808A}" = {B552DDF8-2832-417f-B1D3-B99D8E62808A}, {B552DDF8-2832-417f-B1D3-B99D8E62808A}
 +
 +
[Microsoft.NTARM64]
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F0}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F0}, {D20EA372-DD35-4950-9ED8-A6335AFE79F0}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F1}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F1}, {D20EA372-DD35-4950-9ED8-A6335AFE79F1}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F2}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F2}, {D20EA372-DD35-4950-9ED8-A6335AFE79F2}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F3}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F3}, {D20EA372-DD35-4950-9ED8-A6335AFE79F3}
 +
"{D20EA372-DD35-4950-9ED8-A6335AFE79F5}" = {D20EA372-DD35-4950-9ED8-A6335AFE79F5}, {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
 +
 +
[{D20EA372-DD35-4950-9ED8-A6335AFE79F0}]
 +
CopyFiles=UNIDRV,PJLMON.DLL,@TTFSUB.GPD,@LOCALE.GPD,@MSXPSINC.GPD
 +
 +
[{D20EA372-DD35-4950-9ED8-A6335AFE79F1}]
 +
CopyFiles=PSCRIPT,@MSXPSINC.PPD,@PSCRPTFE.NTF
 +
 +
[{D20EA372-DD35-4950-9ED8-A6335AFE79F2}]
 +
CopyFiles=PCLXL,@PCL5ERES.DLL,@PCL5URES.DLL,@PCL4RES.DLL
 +
 +
[{D20EA372-DD35-4950-9ED8-A6335AFE79F3}]
 +
 +
[{D20EA372-DD35-4950-9ED8-A6335AFE79F5}]
 +
CopyFiles=XPSDRV
 +
 +
[{B552DDF8-2832-417f-B1D3-B99D8E62808A}]
 +
CopyFiles=PSCRIPT_PCLXL_V4
 +
 +
;
 +
; Microsoft Driver Core installs
 +
;
 +
; These sections are used by Printer OEMs to install Microsoft provided print drivers
 +
;
 +
 +
;
 +
; For Core Printer Driver {D20EA372-DD35-4950-9ED8-A6335AFE79F0}
 +
;
 +
 +
; UNIDRV without PJLMON support
 +
[UNIDRV.OEM]
 +
CopyFiles=UNIDRV
 +
 +
; UNIDRV with PJLMON support
 +
[UNIDRV_BIDI.OEM]
 +
CopyFiles=UNIDRV,PJLMON.DLL
 +
 +
[UNIDRV_DATA]
 +
DriverFile=UNIDRV.DLL
 +
ConfigFile=UNIDRVUI.DLL
 +
HelpFile=UNIDRV.HLP
 +
 +
; Data section that attaches PJLMON as the driver Lang Monitor
 +
[UNIDRV_BIDI_DATA]
 +
DriverFile=UNIDRV.DLL
 +
ConfigFile=UNIDRVUI.DLL
 +
HelpFile=UNIDRV.HLP
 +
LanguageMonitor="PJL Language Monitor,PJLMON.DLL"
 +
 +
; Section to allow OEMs to reference the Global Font Substitution Table
 +
[TTFSUB.OEM]
 +
CopyFiles=@TTFSUB.GPD
 +
 +
; Section to allow OEMs to set locale dependencies
 +
[LOCALE.OEM]
 +
CopyFiles=@LOCALE.GPD
 +
 +
; Section to allow OEMs to include core GPD file(s) for XPSDrv driver
 +
[XPSGPD.OEM]
 +
CopyFiles=@MSXPSINC.GPD
 +
 +
; Section to allow OEMs to install PJLMON.DLL
 +
[PJLMON.OEM]
 +
CopyFiles=PJLMON.DLL
 +
 +
;
 +
; For Core Printer Driver {D20EA372-DD35-4950-9ED8-A6335AFE79F1}
 +
;
 +
; PSCRIPT
 +
[PSCRIPT.OEM]
 +
CopyFiles=PSCRIPT
 +
 +
[PSCRIPT_FE.OEM]
 +
CopyFiles=PSCRIPT,@PSCRPTFE.NTF
 +
 +
[PSCRIPT_DATA]
 +
DriverFile=PSCRIPT5.DLL
 +
ConfigFile=PS5UI.DLL
 +
HelpFile=PSCRIPT.HLP
 +
 +
; Section to allow OEMs to include core PPD file(s) for XPSDrv driver
 +
[XPSPPD.OEM]
 +
CopyFiles=@MSXPSINC.PPD
 +
 +
;
 +
; For Core Printer Driver {D20EA372-DD35-4950-9ED8-A6335AFE79F2}
 +
;
 +
; Section to allow OEMs to install PCL6 support files
 +
[PCLXL.OEM]
 +
CopyFiles=PCLXL,@PCL5ERES.DLL
 +
 +
[PCL5ERES.OEM]
 +
CopyFiles=@PCL5ERES.DLL
 +
 +
[PCL5URES.OEM]
 +
CopyFiles=@PCL5URES.DLL
 +
 +
[PCL4RES.OEM]
 +
CopyFiles=@PCL4RES.DLL
 +
 +
;
 +
; For Core Printer Driver {D20EA372-DD35-4950-9ED8-A6335AFE79F3}
 +
;
 +
; Section to allow OEMs to use sRGB color profile
 +
[sRGBPROFILE.OEM]
 +
ColorProfiles="sRGB Color Space Profile.icm"
 +
 +
;
 +
; For Core Printer Driver {D20EA372-DD35-4950-9ED8-A6335AFE79F5}
 +
;
 +
[XPSDRV.OEM]
 +
CopyFiles=XPSDRV
 +
 +
[PSCRIPT]
 +
PSCRIPT5.DLL
 +
PS5UI.DLL
 +
PSCRIPT.HLP
 +
PSCRIPT.NTF
 +
PS_SCHM.GDL
 +
 +
[PJLMON.DLL]
 +
PJLMON.DLL,,,0x00000020 ; Copy only if new binary
 +
 +
[UNIDRV]
 +
UNIDRV.DLL
 +
UNIRES.DLL
 +
UNIDRVUI.DLL
 +
STDNAMES.GPD
 +
STDDTYPE.GDL
 +
STDSCHEM.GDL
 +
STDSCHMX.GDL
 +
UNIDRV.HLP
 +
 +
[PCLXL]
 +
PCLXL.DLL
 +
PCLXL.GPD
 +
P6FONT.GPD
 +
PJL.GPD
 +
P6DISP.GPD
 +
 +
[XPSDRV]
 +
MXDWDRV.DLL
 +
 +
;
 +
; For Core Printer Driver {B552DDF8-2832-417f-B1D3-B99D8E62808A}
 +
;
 +
[PSCRIPT_PCLXL_V4]
 +
PSCRIPT5.DLL
 +
MSXPSINC.PPD
 +
PSCRIPT.NTF 
 +
PSCRPTFE.NTF
 +
PS_SCHM.GDL 
 +
ttfsub.gpd 
 +
unires.dll 
 +
PCLXL.DLL   
 +
PCLXL.GPD   
 +
PCL5ERES.DLL
 +
PCL5URES.DLL
 +
PCL4RES.DLL 
 +
P6FONT.GPD 
 +
PJL.GPD     
 +
P6DISP.GPD 
 +
 +
;
 +
; Call SetupSetDirectoryId with 66000 to set the target directory at runtime
 +
; (depending on which environment drivers are getting installed)
 +
;
 +
 +
[DestinationDirs]
 +
DefaultDestDir=66000
 +
PJLMON.DLL=66002
 +
 +
[SourceDisksFiles]
 +
LOCALE.GPD          = 1
 +
MSXPSINC.PPD        = 1
 +
MSXPSINC.GPD        = 1
 +
MXDWDRV.DLL        = 1
 +
PCLXL.DLL          = 1
 +
PCLXL.GPD          = 1
 +
PCL5ERES.DLL        = 1
 +
PCL5URES.DLL        = 1
 +
PCL4RES.DLL        = 1
 +
P6FONT.GPD          = 1
 +
PJL.GPD            = 1
 +
PJLMON.DLL          = 1
 +
P6DISP.GPD          = 1
 +
PSCRIPT5.DLL        = 1
 +
PS5UI.DLL          = 1
 +
PSCRIPT.HLP        = 1
 +
PSCRIPT.NTF        = 1
 +
PSCRPTFE.NTF        = 1
 +
PS_SCHM.GDL        = 1
 +
STDNAMES.GPD        = 1
 +
STDDTYPE.GDL        = 1
 +
STDSCHEM.GDL        = 1
 +
STDSCHMX.GDL        = 1
 +
ttfsub.gpd          = 1
 +
unidrv.dll          = 1
 +
unidrv.hlp          = 1
 +
unidrvui.dll        = 1
 +
unires.dll          = 1
 +
 +
[ControlFlags]
 +
AlwaysExcludeFromSelect=*
 +
 +
[PrinterPackageInstallation]
 +
PackageAware=TRUE
 +
 +
[Strings]
 +
 +
;Localizable
 +
Disk1="Windows Installation Disc"
 +
 +
[SourceDisksNames.x86]
 +
1  = %Disk1%,,,"I386"
 +
 +
[SourceDisksNames.amd64]
 +
1  = %Disk1%,,,"Amd64"
 +
 +
[SourceDisksNames.ia64]
 +
1  = %Disk1%,,,"Ia64"
 +
 +
[SourceDisksNames.arm]
 +
1  = %Disk1%,,,"arm"
 +
 +
[SourceDisksNames.arm64]
 +
1  = %Disk1%,,,"arm64"
 +
 +
</syntaxhighlight2>
 +
 +
 
 +
 +
[[Windows Driver Model]]に戻る

2021年5月12日 (水) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス