打印机驱动程序开发使用Windows DDK错误

时间:2015-03-13 09:11:20

标签: printing windows-7 driver wdk inf

我是打印机制造商的软件开发人员。最近问过司机。所以我开始挖掘教程,样本,文章。

我做的第一件事是,我下载了Windows驱动程序工具包7600.16385.1。我安装它,使用一些示例驱动程序构建它(例如,仅通用/文本)。我更改了inf文件中的制造商部分并且工作正常。但我要求做更具体的驱动程序,从任何可以打印并将其发送到我们打印机的应用程序中获取数据。

此时我做了一些额外的挖掘,安装Visual Studio 2013和winddk 8.1。我开箱即用v4打印机驱动程序样本。我设法建立了它(Inf到cat表现得很奇怪,所以我禁用了它的项目特性)。然后我尝试安装带有新驱动程序的打印机。驱动程序软件根本没有安装。我通过inf语法,发现了一些错误并解决了问题。之后我不断收到0x00000002错误。我设法解决问题,然后我得到0x0000003错误。

所以,我写下了一个inf intaller c#项目,设法安装驱动程序。驱动程序显示在打印机驱动程序部分,但我尝试安装新的打印机,安装不断失败,错误0x0000003。我做了一些关于错误的搜索,我发现它的path_not_found错误。我检查我的inf文件,做一些语法检查。我付出了一些努力,但我不断收到错误0x0000003。

我为解决问题做了什么?

  1. 在论坛中,人们说这是一个特权问题,导致Windows凭据出现此错误。我设置了新的管理员帐户并安装了驱动程序。但是在尝试设置时,打印机错误是相同的。

  2. 我调查了windows文件夹下的windows日志:setupapi.dev.log和setupact.log。在本节中,我发现0x0000002错误,但未找到0x000003错误。这对我没用。

  3. 论坛中的一些人说可能是预先安装的驱动程序和打印机导致问题。我卸载system32 driverstore下的驱动程序和打印机。同时卸载控制面板下的打印机服务和打印机部分。结果是一样的。

  4. 我找到了channel9,它的微软开发网络有点像。我找到了一些关于开发的视频教程和幻灯片。我看过HW-328T,HW-238T,HW-979P,HW-981P,HW-903T,HW-322T。这个视频给了我一些见解,但仅此而已。

  5. 所以我一直在挖掘问题,使用windows的eventwiever工具。找到HRESULT 0x80070003错误。这是一个打印机后台处理程序错误日志说。我重新启动假脱机程序,错误继续,我重新启动服务并重新启动计算机,错误继续。

  6. 我尝试了我的驱动程序注册表编辑器的旧条目。结果是一样的。我设法得到了Windows文件夹的管理员权限,它没有什么不同。

  7. 我尝试使用带有admin privlidges的命令行安装新打印机,结果相同。

  8. 无数次尝试在64位和32位窗口上安装。

  9. 我也尝试使用GPD,PPD类型。

  10. 我的代码示例

    1. INF文件

      [Version]
      Signature="$Windows NT$"
      Class=Printer
      ClassGuid={4D36E979-E325-11CE-BFC1-08002BE10318}
      Provider=%ManufacturerName%
      CatalogFile=Ali.cat
      ClassVer=4.0
      DriverVer=08/01/2012,1.0.0.0
      
      [DestinationDirs]
      DefaultDestDir = 66000
      
      
      
      [Manufacturer]
      %ManufacturerName%=Ali,NTia64,NTamd64
      
      [Ali]
      "Ali V1" = Ali.GPD
      
      [Ali.NTia64]
      "Ali V1" = Ali.GPD
      
      [Ali.NTamd64]
      "Ali V1" = Ali.GPD
      
      [SourceDisksNames.amd64]
      1= %DiskName%,,,
      
      [SourceDisksFiles.amd64]
      Ali.gpd = 1
      
      [SourceDisksNames.ia64]
      1= %DiskName%,,,
      
      [SourceDisksFiles.ia64]
      Ali.gpd = 1
      
      [Strings]
      ManufacturerName="Ali"
      DiskName="Ali Installation Disk"
      
    2. 用于安装inf文件的我的C#功能代码

      if (SetupCopyOEMInf(inf_path, "", 2, 0x0000400, null, 0, 0, null))
      
    3. 提前致谢。

      注意:如果需要,我也可以发布gpd文件。

2 个答案:

答案 0 :(得分:1)

看来你在INF文件中没有看起来像这样的副本部分:

[Ali.GPD]
CopyFiles=@Ali.gpd

Inf文件要求知道要复制的文件。 这是相关的MSDN doc on this topic

希望这有帮助。

答案 1 :(得分:0)

首先,您必须考虑您的处理器体系结构。绝对不能在基于x86或ARM的体系结构上使用驱动程序,因为示例.inf文件中未包含相关部分。

此外,.inf文件中没有安装部分(“复制文件”指令),但必须包含(特别是如果您打算使用基于INF的安装API的话)。有关创建最小工作.inf文件的信息,请参见here

最后,如何安装打印机驱动程序?您是否使用驱动程序包?如果是,当您提到在工作中绕过inf2cat进程时如何签名? (可能是由于您正在“禁用驱动程序签名强制执行”模式下进行开发!)。否则,如果没有任何.gpd或.ppt文件,您将如何安装打印机?您对打印机有什么期望?

通过添加一些代码段,也许人们可以提供更多帮助。