Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
带或不带INF文件的Windows驱动程序_Windows_Driver_Wdk_Kmdf_Wdf - Fatal编程技术网

带或不带INF文件的Windows驱动程序

带或不带INF文件的Windows驱动程序,windows,driver,wdk,kmdf,wdf,Windows,Driver,Wdk,Kmdf,Wdf,我见过两种安装Windows驱动程序的方法。 A.同时使用SYS文件和INF文件。(如NDIS驱动程序) B仅使用SYS文件,驱动程序将由服务加载。(例如在 C:\Windows\System32\drivers) 所以,我的问题是: 1.什么样的驱动程序或情况需要INF文件? 2.这种差异的根本原因是什么?Windows上有不同类型的驱动程序。对于驱动程序的安装方式,每种类型的驱动程序都有自己的故事。以下是几种常见的驱动程序类型 PNP设备驱动程序。PNP设备驱动程序操作设备树中的设备。当设备

我见过两种安装Windows驱动程序的方法。
A.同时使用SYS文件和INF文件。(如NDIS驱动程序)
B仅使用SYS文件,驱动程序将由服务加载。(例如在 C:\Windows\System32\drivers)

所以,我的问题是:
1.什么样的驱动程序或情况需要INF文件?

2.这种差异的根本原因是什么?

Windows上有不同类型的驱动程序。对于驱动程序的安装方式,每种类型的驱动程序都有自己的故事。以下是几种常见的驱动程序类型

PNP设备驱动程序。PNP设备驱动程序操作设备树中的设备。当设备由其父总线枚举时,PNP将加载PNP驱动程序。为了让PNP知道您的驱动程序支持哪种类型的设备(以及其他一些东西),您需要一个描述驱动程序的PNP风格的INF

SCM管理的驱动程序(有时称为“传统驱动程序”)。SCM根据启动NT服务时使用的相同规则加载这些驱动程序。SCM不需要任何INF。只需运行
sc.exe create my\u cool\u driver type=kernel binPath=c:\my\driver.sys start=auto
或调用
CreateService
API,即可向SCM注册新的驱动程序。但是,如果由于其他原因已经有了INF,则可以通过
AddService
指令使用任何类型的INF来执行相同的操作

NDIS轻型过滤器(LWF)驱动程序。LWF不由NDIS加载;NDIS不在乎它们是如何加载的。大多数LWF选择由SCM加载,因为这很容易控制。尽管如此,仍然需要NetCfg样式的INF,因为NDIS需要知道将过滤器连接到哪种类型的网络适配器(例如,以太网与WLAN)

导出驱动程序。当Mm试图加载从内存管理器导入函数的其他驱动程序时,内存管理器将加载导出驱动程序。导出驱动程序只是DLL的内核等价物,它只是为其他驱动程序提供API。导出驱动程序不需要INF;它们只需要放在磁盘上正确的目录中。如果由于其他原因已经有了INF,可以使用
CopyFiles
指令执行此操作

WinUSB驱动程序。WinUSB是一个内置驱动程序,它将管理USB设备的大部分责任委托给用户模式API,因此任何应用程序都可以轻松地使用该设备完成简单的操作。这意味着几乎任何应用程序都可以成为设备的驱动程序。如果USB设备将某些数据放入其硬件描述符中,Windows将知道自动设置WinUSB,因此不需要INF。但是如果硬件没有宣传它需要WinUSB,那么您需要一个WinUSB样式的INF来告诉Windows为您设置WinUSB。除此之外,从应用程序调用WinUSB API不需要INF


如果您只是在进行实验,并且想调用一些内核API来获得乐趣,那么您可以选择任何类型的驱动程序。大多数人发现SCM管理的驱动程序是最简单的,因为您不需要任何INF,并且可以完全控制驱动程序的启动和停止时间。但在任何其他情况下,驾驶员类型的选择在很大程度上取决于您试图解决的问题。例如,如果您正在为PCI GPU编写驱动程序,则必须使用PNP驱动程序,因此必须具有PCI样式的INF。

答案太棒了!非常感谢:)