2

pscript / unidrvレンダリングプラグインを入手しようとしていますが、提供されているDDKサンプルは、これまでに使用したDDK/ビルド/ターゲットシステムの可能な組み合わせにインストールできません。

報告されるメッセージは、WinXP x64の場合は「指定されたポートが不明です」、Win7、Win8の場合は「要素が見つかりません」です(Win7 setupapiログの一部に「dvi:このタイプのデバイスではNULLドライバーのインストールは許可されていません!」というエラーがあります。ここで見つけることができます)。

これまでのところ、私は次のことを試みました:

  • .rcファイルをFILESUBTYPE(VFT2_DRV_VERSIONED_PRINTER)およびFILETYPE()VFT_DRVに一致するように変更します
  • テスト証明書を使用して署名し、デバッグモードをオンにします
  • 空のhw-idに続けて通常のcompatible-idを.inf("product 1" = product_target,,product_1)の製品名に追加します
  • .inf(.ini、.gpd、.dll)で参照されているすべてのファイルが配置されていることを確認しました
  • 目的のoempsターゲットを除くすべてのファイルへの追加の参照をすべて削除します
  • chkinfテストを実行し、すべての警告を修正します
  • UAC、ファイルの場所を台無しにし、他のインカダンスを行います。

pscriptレンダリングプラグインをシステムにインストールするには、他に何をする必要がありますか?

プリンタドライバの外部で、通常のデバイスとしてインストールすることを意図したことはありますか?MSDNはそれについて本当に不明確ですが、DDKソース内の.infの存在から推測すると、それらを「そのまま」インストールする方法があると思いますが、まだ見つかりません。


UPD:これらのサンプルの説明がWDK8( " http://code.msdn.microsoft.com/windowshardware/OEMDLL-Samples-71364d95 ")にあり、メインの記事( "Microsoftのプリンターのカスタマイズ")にはないものが記載されています。ドライバー")- " BITMAP、OEMPS、OEMUI、OEMUNI、OEMPREAN、CUSTHLP、SyncSet、ThemeUI、PSUIRep、およびWatermarkサンプルはプリンター出力に影響しません"

4

1 に答える 1

3

BITMAP、OEMPSなどに関して引用した引用は、これらのサンプルがドライバープラグインの構造のみを示しており、出力を生成しないことを意味します。しかし、それは彼らができないという意味ではありません。ドライバープラグインを作成する場合は、これらのサンプルの1つから始めて、必要なことを実行するコードを追加することをお勧めします。

プリンタの追加ウィザードではエラーレポートが非常に貧弱であるため、プリントドライバのインストールには注意が必要です。それがあなたに与えるのはWin32エラーコードだけです。たとえば、必要なファイルが欠落している場合は、エラーコード0x2が表示されます。これは、ファイルが欠落していることを意味します。ただし、どのファイルが欠落しているかはわかりません。これは非常にイライラする可能性があります。ただし、これらのサンプルはインストールできますので、ご安心ください。一般に、.infファイルにリストされているすべてのファイルが.infファイルと同じディレクトリに存在する必要があります。ほとんどの場合、これは1つまたは2つのDLLに加えて、.iniおよび.gpdまたは.ppdファイルになります。たとえば、汎用テキストドライバをビルドしてインストールしました。また、そのドライバーのインストールに関する優れたチュートリアルをここで見つけました。

したがって、一般的なテキストサンプルから始めることをお勧めします。ビルドしてインストールしたら、pscriptドライバーに取り組みます。それらが提供する.infファイルを変更したり、.rcファイルや証明書をいじったりしないでください。証明書は必要ありません。

プリンターの追加ウィザードを使用する代わりに、 AddPrinterDriverおよびAddPrinter関数を使用してドライバーを直接インストールすることもできます。これはもっと複雑ですが、より詳細に制御でき、発生しているエラーとその理由を正確に確認できるため、私はそれを好みます。.infファイルは必要ありません。以下は、ドライバーをインストールし、そのドライバーを使用してプリンターを作成する作業コードの一部です。わかりやすくするために、ファイルのエラーチェックとコピーは削除されました。

char driverPath[MAX_PATH];
DWORD needed;
GetPrinterDriverDirectory(0, 0, 1, (UCHAR *)driverPath, sizeof(driverPath), &needed);

// **copy all necessary files to driverPath here**

// format all file names with full paths
char driverSrc[MAX_PATH];
sprintf_s(driverSrc, "%s\\%s", driverPath, psDriverFile);
char driverUISrc[MAX_PATH];
sprintf_s(driverUISrc, "%s\\%s", driverPath, psUIFile);
char driverPPDSrc[MAX_PATH];
sprintf_s(driverPPDSrc, "%s\\%s", driverPath, psPPDFile);
char helpFileSrc[MAX_PATH];
sprintf_s(helpFileSrc, "%s\\%s", driverPath, psHelpFile);

// initialize the DRIVER_INFO struct
DRIVER_INFO_3 di;
memset(&di, 0, sizeof(di));
di.cVersion = 3;
di.pEnvironment = "Windows x64";
di.pDriverPath = driverPath;
di.pName = "MyDriver";
di.pDefaultDataType = "RAW";
di.pDataFile = driverPPDSrc;
di.pConfigFile = driverUISrc;
di.pHelpFile = helpFileSrc;
di.pDependentFiles = pszDependentFiles;

// add the driver
AddPrinterDriver(0, 3, (LPBYTE)&di);

// create the printer
PRINTER_INFO_2 pi;
memset(&pi, 0, sizeof(pi));
pi.pPrinterName = (LPSTR)pPrinterNames->at(i);
pi.pDriverName = "MyDriver";
pi.pPrintProcessor = "winprint";
pi.Attributes = PRINTER_ATTRIBUTE_LOCAL;
pi.pDatatype = "RAW";
pi.pPortName = "LPT1:";
HANDLE hPrinter = AddPrinter(0, 2, (LPBYTE)&pi);
于 2013-02-28T20:59:29.580 に答える