问题标签 [inf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5471 浏览

c# - 使用 C# 的 INF 文件安装 libusb 驱动程序

我想在 Windows 安装程序安装期间安装第三方 libusb 驱动程序。我使用 Visual Studio 2010 创建了这个安装。

我尝试使用 SetupAPI 和 DifXAPI 通过命令行安装此驱动程序,但没有任何反应。我希望会弹出一个窗口,说明它是未签名的驱动程序,您必须单击“确定”才能继续。弹出此窗口的唯一方法是,如果我使用 C# 控制台应用程序和P/Invoke从 DifXApi 调用驱动程序安装代码(指向看起来像是由 inf-wizard 生成的 INF 文件),并且需要为 x64 构建项目(我需要它也适用于 32 位安装程序)。单击确定后,驱动程序从未安装。

正确安装此驱动程序的唯一方法是,如果我通过 USB 插入硬件,右键单击未知设备,然后浏览到包含驱动程序 DLL 文件、sys 文件和 INF 文件的文件夹。Windows 如何确定如何安装驱动程序?

INF 文件包含 32 位/64 位/Itanium 的驱动程序部分,但 Windows 如何知道要安装哪个部分,以及 Windows 与我在命令行中的操作有何不同?

0 投票
1 回答
146 浏览

winapi - UpdateNow 没有设置?(语言监视器问题)

我试图弄清楚如何在不使用 WIN32 API 的 AddMonitor() 的情况下设置打印机语言监视器(即通过编辑注册表或使用 INF 文件),但我一直遇到问题,而且我没有看到任何好的用于此目的的 INF 文件示例。

出于测试目的,我编辑了 ntprint.inf 以将 PJL_LANGUAGE_MONITOR 指向我的 DLL 而不是 pjlmon.dll,并更改了相应的注册表项也这样做。每次我尝试重新加载打印假脱机程序时,我都可以看到它似乎成功加载了我的语言监视器,基于调试输出,但是当我打印时,我不断收到调试消息,上面写着“Upd​​ateNow not set”以及我使用的任何编辑器的 PID正在使用。

我的问题是,您认为这个“UpdateNow not set”消息与问题有关,还是只是一些无关紧要的症状?

0 投票
1 回答
992 浏览

installation - 重新扫描后驱动程序安装完成时,DevCon 可以通知吗?

我正在尝试在 Windows 安装项目期间安装驱动程序。

我要做的第一步是复制 INF 文件并预安装驱动程序。

SetupCopyOEMInf(infFile, null, 1, 0, null, 0, 0, null);

这会正确预安装驱动程序,但在设备管理器中完成硬件重新扫描之前,设备无法使用。我也想自动化这个。我曾尝试使用setupapi.dll 来调用硬件重新扫描,但对我来说并不总是成功。使用 devcon.exe rescan 总是强制重新扫描硬件,但它是一个同步命令,它在设备完成安装之前返回。硬件扫描完成并成功安装驱动后,有什么方法可以得到返回结果?

谢谢,

米莎

编辑

这是我的工作代码:

0 投票
0 回答
2061 浏览

windows - 自定义 Windows USB / RNDIS .inf 文件以更改网络连接名称

我的嵌入式 Linux 设备使用g_etherLinux 中的驱动程序通过 USB 上的以太网与 Windows 7 通信。我正在尝试修改linux.inf下面的内核源代码中的示例文件,src/Documentation/usb/以使我的设备在 Windows 网络连接对话框中显示为“本地连接 2”以外的其他内容。

我只是修改了文件的[strings]一部分linux.inf以指定一个自定义字符串,该字符串确实显示为“本地连接 2”主标题下的子字符串。

我不知道如何让我的设备说出例如“Phils Device”而不是“Local Area Connection 2”。如果有人能启发我如何做到这一点,我将不胜感激!谢谢 -

我修改的示例 .inf 文件的一部分:

参考:

http://msdn.microsoft.com/en-us/library/ff570620.aspx

http://msdn.microsoft.com/en-us/windows/hardware/gg463293.aspx

0 投票
2 回答
5418 浏览

driver - 如何安装和运行驱动程序

我编写了一个简单的驱动程序,它只将“Hello World”打印到调试中。我使用带有 WDK 8 的 Visual Studio 2012 RC 来创建一个空的驱动程序项目并编写了以下代码:

我已经将它编译为win7 x64。我已经读过,为了安装和运行这个驱动程序,我需要编写一个 .inf 文件,但我似乎无法做到这一点。我从 WDK 8 中获取了一个示例 .inf 文件并将其更改为与我的 .sys 文件匹配,但它破坏了我的虚拟机 win7 x64 :-)。因此,我在 VS2012 中创建了一个过滤器驱动程序项目,获取了 .inf 文件并将其更改为匹配我的 .sys 文件,当我安装它时没有发生任何事情。我试图运行它创建的新服务

但调试时没有打印任何内容,而且我在计算机->管理->服务中也看不到 MyDriver。我正在使用 DebugView 查看打印到调试的内容 (http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx)。

当然,我想及时编写一个驱动程序来实际执行某些操作,但同时我只想知道如何运行它。

我从 VS2012 获取并更改的 .inf 文件是这样的:

当我尝试使用 wdreg.exe 安装和运行我的驱动程序时,它显示“无法在 INF 文件中定位制造商部分”。(来自http://www.jungo.com/st/support/documentation/windriver/10.3.0/wdpci_manual.mhtml/dyn_windows.html)我读了很多关于 .inf 文件的内容(来自一些微软的书和很多谷歌) 我仍然不知道如何修复我的 .inf 文件。

如果有更简单的方法来运行我的驱动程序,我很想听听。一旦我知道如何运行它,调试真正的产品就很容易了。

谢谢!

编辑:我还在测试模式(http://www.ngohq.com/home.php?page=dseo)下使用驱动程序签名强制覆盖器来烧写 .sys 文件。

0 投票
4 回答
12582 浏览

windows - 签名的 INF 驱动程序在它被签名的计算机上工作,而不是在其他计算机上工作

我的公司从 Go Daddy购买了司机签名证书。我用它签署了一个简单的 INF 文件,该文件是我们使用 Microsoft 的 usbser.sys 的一些 USB 设备的驱动程序。一切似乎都在我签署它的 Windows 7 64 位计算机上运行:如果我右键单击 INF 文件并选择“安装”,那么我看到的第二个警告是这个显示正确发布者名称的好警告:

发布者是正确的

但是,如果我转到另一台计算机(Windows Vista 64 位),右键单击 INF 文件,然后选择“安装”,然后我会收到以下错误消息:

无法验证发布者

这让我觉得我的驱动程序没有正确签名,它在我的计算机上看起来不错的唯一原因是因为我在 Go Daddy 的安装过程中安装了一些根/中间/交叉证书。我绝对希望我的用户能够看到我们是经过验证的发布者,而无需在他们的计算机上手动安装证书。

INF 文件和 .cat 文件在同一目录中。

有谁知道为什么会发生这种情况以及我该如何解决?

我怀疑主要问题是我在运行时收到此错误signtool verify /v pololu.cat(下面有更多详细信息),我还没有弄清楚原因:

SignTool 错误:已处理证书链,但在信任提供者不信任的根证书中终止。

我的程序的详细信息

司机签名证书是 Go Daddy 几周前推出的新产品。我不完全确定它与Code Signing Certificate有何不同,但价格相同。我按照Go Daddy 网站上的说明下载并安装了证书,但说明与实际情况并不完全相符。在步骤 1 中安装 Microsoft 交叉证书后,我看到一条红色警告消息,上面写着:

在安装证书之前,您必须使用 Windows 更新更新您的根证书或从我们的存储库手动下载并安装根证书。

我不知道该怎么办。我确实从他们的存储库中安装了一些 GoDaddy 根证书,但没有明显区别。

我安装了Windows Driver Kit (WDK)的最新版本 (8.0),然后安装了适用于 Windows 8 的 Windows Software Development Kit (SDK)的最新版本 (8.0) 。这使我可以访问inf2catsigntool实用程序。这两个工具包都是在上个月发布的,所以我们可能正在处理一些新的错误。

在一个新目录中,我放了三个文件:

  1. pololu_usb_to_serial.inf,我要签名的INF文件。它很长但很简单;你可以在这里阅读。这个 INF 文件是一个独立的驱动程序;我们的驱动程序包中不需要其他文件。该文件与我们公司多年来成功分发(未签名)的版本基本相同,但我必须对 Inf2Cat 进行一些更改才能接受它。
  2. mscvr-cross-gdroot-g2.crt,我从Go Daddy 证书存储库下载的。我相信这是证明“Go Daddy Root Certificate Authority - G2”受微软信任的交叉证书,但我不完全确定这是否是正确的证书。
  3. sign_it.bat,我运行的批处理文件进行签名。

批处理文件只包含:

第一个命令inf2cat从 Windows Driver Kit 调用。该/v选项使其变得冗长。该/driver:%~dp0选项将其指向包含批处理文件的目录;a.由于某种原因不起作用,这比对完整路径进行硬编码要好。该/os选项指定了我希望使用此驱动程序包支持的所有操作系统。此命令创建pololu.cat.

第二个命令signtool从 Windows 软件开发工具包调用以对目录文件进行签名。该/v选项使其变得冗长。该/ac选项指定使用哪个交叉证书(参见上面的#2)。该/n选项指定要使用的证书的名称(该证书根据 安装在我的计算机上certmgr.msc)。该/t选项指定 Go Daddy 时间戳服务器的 URL。

这是我运行批处理文件时命令提示符中的输出:

正如我所说,我将 .cat 和 .inf 文件一起保存在同一个目录中,但它们只有在我签名后才能在计算机上正常工作。

使用 Signtool 进行验证

Microsoft的signtool实用程序还具有“验证”功能,可让您验证您的签名是否正确。验证时可以使用三种不同的策略,它们各自给出不同的结果:

  • Windows 驱动程序验证策略说我的签名链不会追溯到 Microsoft,并打印一条错误消息,说明我的 root 是如何不受信任的。这对我来说似乎是个问题。
  • 默认 Authenticode 验证策略( ) 还说我的/pa签名链不会追溯到 Microsoft,但它没有给出错误。
  • 内核模式驱动程序签名策略(可能不适用,/kp因为我没有签署内核模式驱动程序)说我的签名链确实可以追溯到 Microsoft,并且没有给出错误。

有谁知道 Windows 对 INF 文件使用哪种策略?这至少可以帮助我缩小问题的范围。

以下是来自的完整、详细的输出signtool verify

在我签署驱动程序的计算机(它正在工作的地方)和另一台计算机(它不工作的地方)上运行时,输出看起来相同。

StackOverflow 上的类似问题

Thawte 64 位 Windows 驱动程序签名- 这个人的问题的解决方案是将 CatalogFile 指令添加到 INF 文件,但我已经有了。( CatalogFile=pololu.cat)。

编辑#1:签署可执行文件有效

我使用带有相同选项的 signtool 来签署可执行文件(NSIS 安装程序),它在两台计算机上的第一次尝试中都能正常工作。所以我认为 INF 驱动程序文件的签名策略有些不同,这就是让我搞砸的原因。

编辑 #2:GoDaddy 证书上的警告

如果我双击mscvr-cross-gdroot-g2.crt,在“常规”选项卡中会显示“Windows 没有足够的信息来验证此证书”。在“证书路径”选项卡的“证书状态:”下,显示“找不到此证书的颁发者。”。如果我双击gd_ms_drv_sign_bundle.p7b(来自 GoDaddy 的证书包)并打开第一个证书,我也会看到相同的警告。

这两个证书的颁发者应该是 Microsoft 代码验证根。我应该担心那个警告信息吗?

编辑#3:删除 GoDaddy 的证书

GoDaddy 高级支持团队的 Lindsay 回复了我。她从 globalsign 链接到此页面,该页面解释了如何在签署驱动程序的计算机上从 CA 卸载根证书和中间证书。Lindsay 说,如果您不执行此步骤,签名工具将假定这些证书存在于其他计算机上,因此不会将它们包含在签名中。

有谁知道如何检查哪些证书被“导入”到签名中?我可以使用哪些工具来查看 Lindsay 和 GlobalSign 是否正确?

顺便说一句,我们周围有 Windows XP 计算机,但微软很快就会停止支持该操作系统。尽管 GlobalSign 说了什么,但必须一种方法可以在 Windows 7 上完成这项工作。

根据 Lindsay 的建议,我按照 Microsoft 的说明关闭自动根证书更新,然后使用 UIcertmgr.msc删除“受信任的根证书颁发机构”和“中级证书颁发机构”中的所有 GoDaddy 证书。然后我重新签署了我的 inf 文件。

不幸的是,那没有用!签名后,我仔细检查了所有 GoDaddy 证书是否仍被删除。

我没有收到来自 GoDaddy 的关于 的输出的反馈signtool verify,或者我在进行验证时应该检查的驱动程序签名策略的任何输入。我希望他们可以只查看验证输出并告诉我我做错了什么,或者告诉我正确的输出是什么样的。

signtool verify为了完整起见,以下是我删除这些证书并重新签署驱动程序后的三个输出:

编辑#4:DefaultInstall 部分是禁止的

在Microsoft的 DefaultInstall 部分的文档中,我发现了这一点:

注意如果要对驱动程序包进行数字签名,则驱动程序包 的 INF 文件不得包含 INF DefaultInstall部分。

有谁知道为什么这是真的?我找不到解释。

无论如何,我取出了我的 INF 文件的 DefaultInstall 部分,所以从现在开始我必须通过运行我编写的一个名为 SetupCopyOemInf的小 DLL 来测试它。

仍然没有运气;我不断在 Windows Vista 计算机上收到未经验证的发布者警告。

编辑 #5:JLink 驱动程序已正确签名

我在 C:\Windows\System32\DriverStore\FileRepository 中四处寻找,试图找到一些正确签名的驱动程序包。我发现的第一个有趣的是 JLinkCDC.cat/JLinkCDC.inf。Inf 文件的版本是DriverVer=01/25/2012,6.0.2600.4. 在 Windows Vista 机器上,如果我在 inf 文件上调用 SetupCopyOemInf(使用我的 DLL),那么我会收到一条正确的消息,告诉我发布者是谁(Segger GMBH 或类似的东西)。因此,可以正确签署像我这样的驱动程序包,但不知何故 GoDaddy 或我做错了什么。

JLinkCDC.inf 驱动程序和我的驱动程序非常相似,因为它只是一个文件并且使用了 usbser.sys。他们签名的信任链可以追溯到 VeriSign Class 3 Public Primary Certificate Authority - G5。

基本上,这个 JLinkCDC 驱动程序和我的很相似并且可以工作,所以我打算仔细研究一下,看看有什么不同。

JLinkCDC.cat 的 signtool verify的输出看起来与我的非常相似,只是它追溯到 Verisign 而不是 GoDaddy。

编辑#6:微小的变化

为了使我的驱动程序更像 JLinkCDC.inf,我添加DriverPackageType=PlugAndPlay到 INF 文件并缩短了文件名:这些文件现在称为 polser.cat 和 polser.inf。还是没有运气!

编辑#7:一些成功!

我认为以下几点是正确的;如果我错了,请纠正我:

  • 对于驱动程序包(.cat 文件),正确的选项signtool verify/pa. 我从KMCS_Walkthrough.doc推断出这一点。
  • 对于驱动程序包,如果信任链返回到 certmgr.msc 中“受信任的根证书颁发机构”文件夹中的证书,Windows 只会考虑验证发布者。
  • 对于驱动程序包,您可以使用交叉证书对其进行签名(将信任链从 gdroot-g2.crt 扩展到 Microsoft 代码验证根),但 Windows 似乎忽略了这一点。这是因为 Microsoft 代码验证根不是“受信任的根证书颁发机构”。
  • 有当前用户的证书存储和本地计算机的证书。它们都很重要,因此您应该使用MMC 证书管理单元来查看两者。Certmgr.msc 仅显示当前用户的那些。
  • Windows应该在需要时将“Go Daddy 根证书颁发机构 - G2”(gdroot-g2.crt) 无缝添加到“受信任的根证书颁发机构”文件夹中,从 Windows 更新下载它,但它没有。 更多信息在这里。

我在测试机器上使用了 Windows 事件查看器来查看发生了什么。看起来 Windows 会自动获取“Go Daddy Root Certificate Authority - G2”,但只有在它显示不受欢迎的未经验证的发布者警告对话框之后。一旦用户关闭该对话框,就会从 Windows 更新中获取证书,因此下一次安装尝试应该会成功。有趣的是,它确实会及时自动下载 Starfield 证书(它是我的时间戳的信任链的根)。

通过双击 gdroot-g2.crt 并在尝试安装驱动程序之前将其导入,我已经获得了在 Windows 7 和 Windows Vista 计算机上工作的签名。我会看看这个过程是否可以自动化并添加到安装程序中。

我找到了来自另一家公司 (JLinkCDC.cat) 的驱动程序包,该驱动程序包使用 VeriSign 证书签名,该证书植根于“VeriSign Class 3 Public Primary Certification Authority - G5”。该证书在我查看过的所有计算机上,因此如果您使用 VeriSign 而不是 Go Daddy,我认为您可以使用 Windows Update 避免这个问题。

我确实注意到 VeriSign 证书使用 SHA1,而我的 Go Daddy 证书使用 SHA256 作为签名算法和签名哈希算法。不确定这是否重要。

编辑#8:向微软寻求帮助

请参阅 MSDN 论坛上的讨论和我的结论:http: //social.msdn.microsoft.com/Forums/en-US/wdk/thread/1fede768-7925-4f30-8eef-ce5bd08b0b60

0 投票
1 回答
515 浏览

windows - Windows 驱动程序硬件 ID

我正在使用 C# 和 WMI 做一些显示人员。我发现设备管理器中的 HardwareID 与我在 inf 文件中找到的不同。例如,我在 Inf 文件中找到:[制造商]

但在设备管理器中,是

Inf 文件中的 HardwareID 附加了一些内容。在最后或中间。有人解释一下吗?

我如何从 WMI 查询设备实例路径?或任何其他解决方案?

0 投票
1 回答
1631 浏览

installation - 安装 inf 文件但“发现新硬件”向导仍需要驱动程序

我想知道是否有人可以指出正确的方向,因为这个 inf 问题一直困扰着我一段时间。

我正在使用 ClickOnce 安装程序来安装必备组件。

我编写了一个 boostrapper 包,它可以无条件地将包(.inf、.cat、dpinst.exe、.bat)成功下载到 PC。

批处理文件运行命令“dpinst /LM”,“设备驱动安装向导”自动弹出,“正在完成设备驱动安装向导”提示成功。

接下来,我将一根特殊的 USB 电缆插入 PC,然后弹出“找到新硬件”向导。现在问题来了:

它询问司机的位置。对于从未连接过这种特殊 USB 电缆的 PC,它需要我明确指定 .inf 和 .cat 文件的位置;否则,它找不到它们并且会失败。(对于之前用过专用usb线的电脑,它会自动发现没问题。)

我想知道我缺少什么导致“找到新硬件”向导无法自动找到 .inf 和 .cat 文件。看起来上一步“设备驱动程序安装”向导没有成功安装 .inf/.cat 文件。当我查看“c:Windows\Inf”文件夹时,我看不到相关的 oem 或 inf 文件。

PS。我正在 32 位 Windows XP PC 上对其进行测试。

提前致谢。

0 投票
1 回答
1899 浏览

inf - inf2cat 22.9.10 error

I'm trying to sign old Hitachi driver that makes USB flash drive appear as fixed disk (Quite useful when you have fast, large thumb drives)

Driver itself works fine but I constantly get same error when try to get it signed:

Errors:

This is my .inf file:

I was using this tutorial as reference point: http://www.deploymentresearch.com/Blog/tabid/62/EntryId/63/Sign-your-unsigned-drivers-Damn-It.aspx

cfadisk.inf and sys can be downloaded here: link is at the beginning of first post

http://hardforum.com/showthread.php?t=1655684

Any help would be greatly appreciated

EDIT:

I just used chkinf utility on this .inf file Here is the output:

I'm really no programer so I really don't understand what does all this mean.

Strange thing is that driver does work, I just can't get i signed.

Thank you!

Best regards,

Walter

0 投票
1 回答
2335 浏览

windows - 适用于多个平台和操作系统的 Windows INF 文件

我正在尝试创建一个 Windows INF 文件来安装可与 32 位或 64 位 Windows 7 或 Windows 8 一起使用的驱动程序。我有 4 个不同的 .SYS 文件,它们都具有相同的名称,每种情况一个。在我的发行版中,我创建了 4 个目录,每个目录都包含一个驱动程序文件。

在 INF 文件的 SourceDisksNames 部分中,我尝试使用装饰 .x86 和 .amd64,这些将在 32 位和 64 位 Windows 上的安装之间正确选择。

这工作正常,除了我还需要在 Windows 7 和 8 之间进行选择。阅读 MSDN 它说我可以使用补充装饰 .6.1(Windows 7)和 .6.2 用于 Windows 8。所以我最终得到了一个像这样的部分名称

但是现在无法完成安装。显示“无法添加请求的功能。错误是:在 INF 中找不到所需的行”对话框。

谁能看到我做错了什么。指向一个工作示例的指针会很棒。