Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Printing 如何安装pscript/unidrv呈现插件?DDK/WDK print/oemdll样品的行为很奇怪_Printing_Drivers_Wdk_Inf - Fatal编程技术网

Printing 如何安装pscript/unidrv呈现插件?DDK/WDK print/oemdll样品的行为很奇怪

Printing 如何安装pscript/unidrv呈现插件?DDK/WDK print/oemdll样品的行为很奇怪,printing,drivers,wdk,inf,Printing,Drivers,Wdk,Inf,我正试图从中获得一些东西,但提供的DDK示例无法安装在我曾经使用过的DDK/构建/目标系统的任何可能组合上 报告的消息是WinXP x64的“指定端口未知”,以及Win7、Win8的“未找到元素”(Win7 setupapi日志的一部分,带有显著的“dvi:此类型的设备不允许安装空驱动程序!”错误) 到目前为止,我试图: 更改.rc文件以匹配文件子类型(VFT2\u DRV\u version\u PRINTER)和文件类型(VFT\u DRV) 使用测试证书签名,打开调试模式 将空的硬件id

我正试图从中获得一些东西,但提供的DDK示例无法安装在我曾经使用过的DDK/构建/目标系统的任何可能组合上

报告的消息是WinXP x64的“指定端口未知”,以及Win7、Win8的“未找到元素”(Win7 setupapi日志的一部分,带有显著的“dvi:此类型的设备不允许安装空驱动程序!”错误)

到目前为止,我试图:

  • 更改.rc文件以匹配文件子类型(
    VFT2\u DRV\u version\u PRINTER
    )和文件类型(
    VFT\u DRV
  • 使用测试证书签名,打开调试模式
  • 将空的硬件id后跟正常兼容id添加到.inf中的产品名称中(
    “产品1”=产品目标,产品1
  • 已检查.inf(.ini、.gpd、.dll)中引用的所有文件是否都已就位
  • 删除对任何文件的所有附加引用,不包括我所需的oemps目标
  • 运行chkinf测试并修复所有警告
  • 搞乱UAC,文件位置,跳其他印加舞

要在系统中安装pscript渲染插件,还应该做些什么

它们是否打算作为普通设备安装在打印机驱动程序之外?MSDN在这一点上确实不清楚,但是,从DDK源代码中存在的.inf猜测,我想有一种方法可以“按原样”安装它们,我只是没有发现。。然而



UPD:在WDK8(“”)中找到了这些示例的描述,其中提到了在主要文章(“自定义Microsoft的打印机驱动程序”)中找不到的内容—“位图、OEMPS、OEMUI、OEMUNI、OEMPREAN、CUSTHLP、SyncSet、ThemeUI、PSUIRep和水印示例不会影响打印机输出”

您引用的关于位图、oemp等的引用仅仅意味着这些示例只显示驱动程序插件的结构,不产生任何输出。但这并不意味着他们不能。如果您想要构建一个驱动程序插件,我建议您从这些示例中的一个开始,并向其中添加您想要的代码

安装打印驱动程序可能很棘手,因为“添加打印机向导”提供的错误报告非常差。它只提供了一个Win32错误代码。例如,如果缺少任何必需的文件,它只会显示错误代码0x2,这意味着缺少文件。但是,它不会告诉您丢失了哪个文件,这可能非常令人沮丧。但请放心,这些样品是可以安装的。通常,需要将.inf文件中列出的所有文件与.inf文件放在同一目录中。在大多数情况下,这将是一个或两个DLL,加上一个.ini和一个.gpd或.ppd文件。例如,我刚刚构建并安装了通用文本驱动程序。我还找到了一个关于安装该驱动程序的好教程

因此,我建议您从通用文本示例开始。一旦您构建并安装了它,就可以处理pscript驱动程序。不要更改他们提供的.inf文件,不要篡改.rc文件或证书;你不需要证书

使用“添加打印机向导”的另一种方法是直接使用和功能安装驱动程序。这更复杂,但我更喜欢它,因为它给了您更多的控制,您可以确切地看到发生了什么错误以及原因。不需要.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);

WDK示例当然可以安装,但这些示例在如何安装方面非常欠缺。发布您试图使用的.INF文件,我相信我们可以让它正常工作。至于你的最后一个问题,我不知道你在问什么。pscript/unidrv插件正是:用于底层Microsoft pscript/unidrv驱动程序的插件。它们本身不是完整的打印驱动程序。@CareyGregory考虑到MSDN是针对选定的应用程序的(例如,您希望有人编写打印机硬件驱动程序,而不是打印软件输出过滤器)-可以假设,我认为这些驱动程序是可安装的想法是非常错误的。。更多详情请参见更新后的内容。然而,这里是.inf,-如果您能给出一个关于切换安装方法的想法,我将非常高兴。