打印机 Driver 开发使用 Windows DDK 错误
Printer Driver Development Using Windows DDK error
我是打印机制造商的软件开发人员。最近问了一个driver。所以我开始挖掘教程、样本、文章。
首先,我下载了 Windows Driver 套件 7600.16385.1。我安装它,用一些示例 drivers 构建它(例如,仅 generic/text)。我更改了 inf 文件中的制造商部分并且工作正常。但我要求做更具体的 driver,从任何可以打印的应用程序获取数据并将其发送到我们的打印机。
此时我做了一些额外的挖掘,安装了 Visual Studio 2013 和 winddk 8.1。我尝试开箱即用的 v4 打印机 driver 样本。我设法构建了它(Inf to cat 表现得很奇怪,所以我禁用了它的项目属性)。然后我尝试使用新 driver 安装打印机。 Driver 根本没有安装软件。我通过了 inf 语法,发现了一些错误并解决了问题。之后我不断收到 0x00000002 错误。我设法解决了问题,然后出现 0x0000003 错误。
所以,我写下了一个 inf intaller c# 项目,设法安装 driver。 Driver 出现在打印机 driver 部分,但我尝试安装一台新打印机,安装一直失败,错误为 0x0000003。我做了一些关于错误的搜索,我发现它是 path_not_found 错误。我检查我的 inf 文件,做一些语法检查。我在那里付出了一些努力,但我不断收到错误 0x0000003。
我是怎么解决这个问题的?
在论坛上,人们说这是导致 windows 凭据出现此错误的权限问题。我设置了新的管理员帐户并安装了 driver。但是当尝试设置时,打印机错误是相同的。
我调查了 windows 文件夹下的 windows 日志:setupapi.dev.log 和 setupact.log。在本节中,我发现 0x0000002 错误,但未发现 0x000003 错误。这对我没有帮助。
论坛上有些人说可能是预装的 drivers 和打印机导致了问题。我卸载了 system32 driverstore 下的 drivers 和打印机。同时卸载控制面板下的打印机服务和打印机部分。结果一样。
我找到了 channel9,它是某种 Microsoft 开发网络。我找到了一些关于开发的视频教程和幻灯片。我看了 HW-328T、HW-238T、HW-979P、HW-981P、HW-903T、HW-322T。这些视频给了我一些见解,但仅此而已。
所以我一直在挖掘问题,使用 windows 的 eventwiever 工具。发现 HRESULT 0x80070003 错误。这是一个打印机假脱机程序错误日志说。我重新启动后台处理程序,错误继续,我重新启动服务并重新启动计算机,错误继续。
我尝试使用 driver 注册表编辑器的旧条目。结果是一样的。我设法获得了 windows 文件夹的管理员权限,但没有任何区别。
我尝试使用具有管理员权限的命令行安装新打印机,结果是一样的。
多次尝试在 64 位和 32 位上安装 windows。
我也尝试使用 GPD、PPD 类型。
我的代码示例。
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"
我的安装inf文件的C#函数代码
if (SetupCopyOEMInf(inf_path, "", 2, 0x0000400, null, 0, 0, null))
提前致谢。
注意:如果需要,我也可以postgpd文件。
您的 INF 文件中似乎没有类似于以下内容的复制部分:
[Ali.GPD]
CopyFiles=@Ali.gpd
Inf 文件需要它来知道要复制哪些文件。
这里是相关的 MSDN doc on this topic.
希望对您有所帮助。
首先,您必须考虑您的处理器架构。您的驱动程序绝对不能在基于 x86 或 ARM 的体系结构上运行,因为相关部分未包含在您的示例 .inf 文件中。
此外,您的 .inf 文件中没有安装部分(复制文件指令),但必须包含(特别是如果您打算使用基于 INF 的安装 API)。要创建最小工作 .inf 文件,请参阅 here.
最后,打印机驱动怎么安装呢?您是否使用驱动程序包?如果是,当您提到在您的工作中绕过 inf2cat 进程时,您是如何签名的? (可能你正在 "Disabled Driver Signature Enforcement" 模式下开发!)。否则,如果没有任何 .gpd 或 .ppt 文件,您将如何安装打印机?您对打印机有何期望?
通过添加一些代码片段,人们可能会提供更多帮助。
我是打印机制造商的软件开发人员。最近问了一个driver。所以我开始挖掘教程、样本、文章。
首先,我下载了 Windows Driver 套件 7600.16385.1。我安装它,用一些示例 drivers 构建它(例如,仅 generic/text)。我更改了 inf 文件中的制造商部分并且工作正常。但我要求做更具体的 driver,从任何可以打印的应用程序获取数据并将其发送到我们的打印机。
此时我做了一些额外的挖掘,安装了 Visual Studio 2013 和 winddk 8.1。我尝试开箱即用的 v4 打印机 driver 样本。我设法构建了它(Inf to cat 表现得很奇怪,所以我禁用了它的项目属性)。然后我尝试使用新 driver 安装打印机。 Driver 根本没有安装软件。我通过了 inf 语法,发现了一些错误并解决了问题。之后我不断收到 0x00000002 错误。我设法解决了问题,然后出现 0x0000003 错误。
所以,我写下了一个 inf intaller c# 项目,设法安装 driver。 Driver 出现在打印机 driver 部分,但我尝试安装一台新打印机,安装一直失败,错误为 0x0000003。我做了一些关于错误的搜索,我发现它是 path_not_found 错误。我检查我的 inf 文件,做一些语法检查。我在那里付出了一些努力,但我不断收到错误 0x0000003。
我是怎么解决这个问题的?
在论坛上,人们说这是导致 windows 凭据出现此错误的权限问题。我设置了新的管理员帐户并安装了 driver。但是当尝试设置时,打印机错误是相同的。
我调查了 windows 文件夹下的 windows 日志:setupapi.dev.log 和 setupact.log。在本节中,我发现 0x0000002 错误,但未发现 0x000003 错误。这对我没有帮助。
论坛上有些人说可能是预装的 drivers 和打印机导致了问题。我卸载了 system32 driverstore 下的 drivers 和打印机。同时卸载控制面板下的打印机服务和打印机部分。结果一样。
我找到了 channel9,它是某种 Microsoft 开发网络。我找到了一些关于开发的视频教程和幻灯片。我看了 HW-328T、HW-238T、HW-979P、HW-981P、HW-903T、HW-322T。这些视频给了我一些见解,但仅此而已。
所以我一直在挖掘问题,使用 windows 的 eventwiever 工具。发现 HRESULT 0x80070003 错误。这是一个打印机假脱机程序错误日志说。我重新启动后台处理程序,错误继续,我重新启动服务并重新启动计算机,错误继续。
我尝试使用 driver 注册表编辑器的旧条目。结果是一样的。我设法获得了 windows 文件夹的管理员权限,但没有任何区别。
我尝试使用具有管理员权限的命令行安装新打印机,结果是一样的。
多次尝试在 64 位和 32 位上安装 windows。
我也尝试使用 GPD、PPD 类型。
我的代码示例。
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"
我的安装inf文件的C#函数代码
if (SetupCopyOEMInf(inf_path, "", 2, 0x0000400, null, 0, 0, null))
提前致谢。
注意:如果需要,我也可以postgpd文件。
您的 INF 文件中似乎没有类似于以下内容的复制部分:
[Ali.GPD]
CopyFiles=@Ali.gpd
Inf 文件需要它来知道要复制哪些文件。 这里是相关的 MSDN doc on this topic.
希望对您有所帮助。
首先,您必须考虑您的处理器架构。您的驱动程序绝对不能在基于 x86 或 ARM 的体系结构上运行,因为相关部分未包含在您的示例 .inf 文件中。
此外,您的 .inf 文件中没有安装部分(复制文件指令),但必须包含(特别是如果您打算使用基于 INF 的安装 API)。要创建最小工作 .inf 文件,请参阅 here.
最后,打印机驱动怎么安装呢?您是否使用驱动程序包?如果是,当您提到在您的工作中绕过 inf2cat 进程时,您是如何签名的? (可能你正在 "Disabled Driver Signature Enforcement" 模式下开发!)。否则,如果没有任何 .gpd 或 .ppt 文件,您将如何安装打印机?您对打印机有何期望?
通过添加一些代码片段,人们可能会提供更多帮助。