分享

如何制作集成硬件驱动的XP系统

 twins2twins 2010-01-16

如何在 Windows 安装中添加 OEM 即插即用驱动程序
察看本文应用于的产品
文章编号 : 254078
最后修改 : 2004年6月25日
修订 : 4.0
重要说明:本文包含有关修改注册表的信息。修改注册表之前,一定要备份注册表,并且一定要知道在发生问题时如何还原注册表。有关如何备份、还原和编辑注册表的信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256986 ( http://support.microsoft.com/kb/256986/) Microsoft Windows 注册表说明
本页
概要
更多信息
无人参与安装
Sysprep 安装
RIS 安装
Riprep 映像
现有 Windows 安装
这篇文章中的信息适用于:

概要
本文介绍在 Windows 安装中添加原始设备制造商 (OEM) 提供的驱动程序的步骤。本文仅涵盖通常在图形用户界面 (GUI) 模式安装期间安装的驱动程序,或在完成安装后通过即插即用枚举安装的驱动程序。使用这些步骤,可以预先加载 OEM 即插即用驱动程序,以后向系统中添加相关的硬件时就可以使用这些驱动程序了。

本文介绍在下列情形中如何添加 OEM 即插即用驱动程序: • 无人参与安装
• Sysprep 安装
• 远程安装服务 (RIS) 安装
• Riprep 映像
• 现有 Windows 安装
有关在文本模式安装期间添加 OEM 提供的大容量存储设备的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
220845 ( http://support.microsoft.com/kb/220845/) 在 Windows 安装期间添加第三方或更新的驱动程序
回到顶端

更多信息
必须找到在 GUI 模式安装的“安装设备”阶段安装的驱动程序的特定位置。找到后,安装程序将使用由 Windows 即插即用功能所枚举的即插即用 ID 来安装这些设备。安装程序将在驱动器上搜索一个预定义的路径,查看 .inf 文件以找到与设备的即插即用 ID 最匹配的项。默认情况下,此路径在下面的注册表位置定义并设置为 %SystemRoot%\Inf:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath:REG_EXPAND_SZ:%SystemRoot%\Inf
安装程序将使用此路径为设备安装定位 .inf 文件。安装完毕后,此路径还可用于所发现和安装的任何新硬件。如果您在安装期间使用 Sysprep.inf 或无人参与应答文件修改此项,该值将被保存而且在安装完毕后还可以使用。

下面几节将介绍向 Windows 的无人参与安装或 Sysprep 安装添加 OEM 提供的驱动程序的步骤。
回到顶端

无人参与安装
当您向无人参与安装添加驱动程序时,请按照下列步骤操作。如果 OEM 提供的驱动程序未经数字签名,在安装期间,您可能会接收到有关这些驱动程序的消息。有关如何避免显示此消息的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
236029 ( http://support.microsoft.com/kb/236029/) 如何为 Windows 2000 无人参与安装设置驱动程序签名策略
1. 通过复制 Windows 安装光盘上的 I386 文件夹中的内容,在网络服务器上创建您的分发共享。您可以使用 Setupmgr.exe 创建此共享和您的 Unattended.txt 文件。您可以在 Windows 安装光盘上的 Support\Tools 文件夹中的 Deploy.cab 文件中找到 Setupmgr.exe,以及包含关于 Windows 无人参与安装信息的 Unattend.doc 文件。
2. 在 I386 文件夹中创建 $oem$\$1\Drivers 文件夹。根据您要安装的硬件(例如,网络适配器、调制解调器或视频适配器),您可能需要在 Drivers 子文件夹中创建其他一些文件夹。$1 文件夹解析为 %SystemDrive%。在文本模式安装期间,这些文件夹和文件将被复制到 %SystemDrive%\Drivers 文件夹。例如:
\i386
\$oem$
- - \$1
- - - \Drivers
- - - - - \network adapter
- - - - - \MODEM
- - - - - \VIDEO

3. 将 OEM 提供的所有设备驱动程序文件复制到上一步创建的这些文件夹中。
4. 在安装程序应答文件的 [Unattended] 节中添加 OemPnPDriversPath = Driver_Paths 项。您可以在此项中列出多个路径,并用分号 (;) 将它们分隔开。例如: [Unattended]
OemPnPDriversPath = "Drivers\network adapter;Drivers\Modem;Drivers\Video"

注意:%SystemDrive% 环境变量字符串将自动插入到每一个列出的搜索路径的前面。
5. 保存该应答文件。
在 GUI 模式安装期间,当系统在 .inf 文件中搜索即插即用 ID 时,它还搜索在 OemPnPDriversPath 中指出的路径和 %WinDir%\Inf 这一标准默认路径。%WinDir%\Inf 路径在搜索顺序中列在第一位,但是如果您的设备有多个 .inf 文件(Windows 可能包括一个提供一般功能的驱动程序)支持,安装程序将继续搜索在 OemPnPDriversPath 项中指定的所有路径。尽管可以找到多个匹配项,但即插即用功能只使用包含最匹配的项的 .inf 文件,然后安装相关联的设备驱动程序以支持此设备。
回到顶端

Sysprep 安装
向 Windows Sysprep 安装中添加 OEM 提供的驱动程序的步骤与本文“无人参与安装”一节描述的步骤相似,不同之处在于您不必创建分发共享。要向 Sysprep 的最小安装向导中添加驱动程序,请按照下列步骤操作。

注意:要向您用来启动计算机的 Sysprep 映像添加 OEM 第三方大容量存储驱动程序,您需要安装 Sysprep 的 1.1 版。要下载最新的 Sysprep 工具和文档,请访问下面的 Microsoft Web 站点:
http://www.microsoft.com/windows2000/downloads/deployment/sysprep/ ( http://www.microsoft.com/windows2000/downloads/deployment/sysprep/)
1. 在 %WinDir% 文件夹所在的卷的根目录,创建一个文件夹结构以容纳 OEM 提供的驱动程序。例如:

\Drivers
- - \network adapter
- - \VIDEO
\Sysprep
\WINNT
2. 将 OEM 提供的驱动程序复制到相应的子文件夹中。
3. 将 OemPnPDriversPath = Driver_Paths 项添加到 Sysprep.inf 文件的 [Unattended] 节。您可以在此项中列出多个路径,并用分号 (;) 将它们分隔开。例如:[Unattended]
OemPnPDriversPath = "Drivers\network adapter;Drivers\Video"

注意:%SystemDrive% 环境变量字符串将自动插入到每一个列出的搜索路径的前面。
如果您不想让 OEM 提供的驱动程序在最小安装向导完成后仍保留在卷上,您可以将在上一步中创建的文件夹结构添加到 Sysprep 文件夹下。您需要适当地调整“OemPnPDriversPath =”项。安装完成后,将自动删除 Sysprep 文件夹(及其子文件夹)。

将 Sysprep.inf 文件保存到 Sysprep 文件夹中并运行 Sysprep.exe。在最小安装向导执行期间,所有即插即用设备(包括那些使用 OEM 驱动程序 .inf 文件找到的设备)将自动安装到目标计算机上。请注意,您不必指定 -pnp 命令行开关,除非目标计算机上存在较早的 (ISA) 设备。如果您使用 -pnp 命令行开关,将对所有设备重新执行即插即用枚举,这会使 Sysprep 最小安装向导过程的时间增加 5-10 分钟。而且,如果您使用 Sysprep 1.1 版指定附加的大容量存储控制器,则 -pnp 命令行开关会导致一些多余的硬盘控制器出现在设备管理器中。有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
253340 ( http://support.microsoft.com/kb/253340/) 使用 Sysprep 1.1 版时设备管理器中出现不存在的 SCSI 设备
216937 ( http://support.microsoft.com/kb/216937/) 系统准备工具和应答文件的使用
注意:如果 OEM 提供的驱动程序未经数字签名,最小安装向导将推迟设备的安装,直到有管理员登录到该计算机上。这称为“客户端对服务器端”安装,它出现在最小安装向导安装期间。

有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
256204 ( http://support.microsoft.com/kb/256204/) 在 Sysprep 最小安装向导过程中如果不使用 -pnp 开关,将不会安装未签名的驱动程序
回到顶端

RIS 安装
向 RIS 安装添加 OEM 即插即用驱动程序的步骤与本文“无人参与安装”一节列出的步骤相同,只不过要做两个小的调整: 1. 将 $oem$ 文件夹置于与 RIS 映像所在的 \I386 文件夹相同的级别。例如:RemoteInstall\Setup\%language\Images\%dir_name%\i386
RemoteInstall\Setup\%language\Images\%dir_name%\$oem$\$1\Drivers
\network adapter
\MODEM
\VIDEO


2. 修改 RIS 映像默认模板 (Ristndrd.sif)。在 [Unattended] 节中,将“OemPreinstall =”项的值从 No 更改为 Yes,然后添加 OemPnPDriversPath = Driver_Path 项。您可以在此项中列出多个路径,并用分号 (;) 将它们分隔开。例如:[Unattended]
OemPreinstall = Yes
OemPnPDriversPath = "Drivers\network adapter;Drivers\Modem;Drivers\Video"

注意:%SystemDrive% 环境变量字符串将自动插入到每一个列出的搜索路径的前面。

注意:如果 OEM 提供的驱动程序中有一个是用于网卡设备的,则 RIS 服务器在文本模式安装期间重新启动时必须提供该文件。有关此过程的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
246184 ( http://support.microsoft.com/kb/246184/) 如何将第三方 OEM 网络适配器添加到 RIS 安装
3. 在 RIS 服务器上停止并重新启动 BINL 服务,在命令提示符处键入下面的内容:

• net stop "boot information negotiation layer"
• net start "boot information negotiation layer"


回到顶端

Riprep 映像
Riprep 和 Sysprep 在功能上有许多相似之处,因此,为将要进行映像的计算机添加 OEM 即插即用驱动程序涉及的步骤,与针对 Sysprep 采取的步骤相似。在对映像计算机运行 Riprep 以将其复制到 RIS 服务器之前,请按照下列步骤操作: 1. 在 %SystemDrive% 文件夹上创建一个名为 Sysprep 的文件夹(这很可能是驱动器 C,因为 Riprep.exe 只能复制一个卷/分区)。
2. 在该卷的根目录,创建一个文件夹结构以容纳 OEM 提供的驱动程序。例如:
\Drivers
- - \network adapter
- - \VIDEO
\Sysprep
\WINNT
3. 将 OEM 提供的驱动程序复制到相应的子文件夹中。
4. 在 Sysprep 文件夹中创建一个 Sysprep.inf 文件,然后添加 [Unattended] 和 OemPnPDriversPath = Driver_Path 项。您可以在此项中列出多个路径,并用分号 (;) 将它们分隔开。例如:
[Unattended]
OemPnPDriversPath = "Drivers\network adapter;Drivers\Video"
注意:%SystemDrive% 环境变量将自动插入到指定的每一个列出的搜索路径的前面。

注意:如果该设备已被操作系统识别为已知设备或未知设备,则在运行 sysprep 之前,您必须通过设备管理器删除该设备,否则在执行最小安装期间将不会安装更新的驱动程序。


5. 从客户机上的 \\RisServer\Reminst\Admin\I386 文件夹中运行 Riprep.exe,以便将映像复制到选定的 RIS 服务器。Riprep 将在 Sysprep 文件夹中查找 Sysprep.inf 文件,读取“OemPnPDriversPath=”项,然后在将计算机的注册表复制到服务器之前更新其 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Devicepath 注册表项,以便在执行最小安装向导期间可以使用此项。

注意:在此过程中创建的默认 Riprep.sif 文件不受在前面步骤中创建的 Sysprep.inf 文件中的项的影响。
6. 在 RIS 服务器上停止然后重新启动 BINL 服务。在命令提示符处键入下面的命令行:• “net stop "boot information negotiation layer"”(不带最外层引号)
• “net start "boot information negotiation layer"”(不带最外层引号)
注意:如果 OEM 提供的驱动程序中有一个是用于主网卡的,则在下载 Riprep 映像之前,RIS 服务器还必须从一般的 RIS 平面映像中提供此文件。如果是这种情况,您还必须按照本文“RIS 安装”一节中介绍的步骤操作,或采用下面的 Microsoft 知识库文章中介绍的过程:


246184 ( http://support.microsoft.com/kb/246184/) 如何将第三方 OEM 网络适配器添加到 RIS 安装
如果已创建好映像,并且您希望添加 OEM 提供的即插即用驱动程序,Microsoft 建议您使用 RIS 将该映像下载到一台计算机上,按照前面的“Riprep 映像”一节中列出的步骤操作,然后通过 Riprep 将该映像返回到 RIS 服务器。

注意:这样做有一个副作用,即驱动程序路径在 Software\Microsoft\Windows\CurrentVersion\DevicePath 项中会被输入两次。

有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
258862 ( http://support.microsoft.com/kb/258862/) Riprep.exe 向注册表中添加重复的路径

回到顶端

现有 Windows 安装
您可能需要向现有的、基于 Windows 并需要 OEM 提供的驱动程序的计算机添加新的硬件设备。尽管此过程要求您安装新的设备,但您可能仍然希望让 OEM 提供的驱动程序以可管理的方式分发,或让它们集中放在一台服务器上。为此,请按照下列步骤操作: 1. 决定是希望在本地复制驱动程序,还是希望将它们存储在一台集中分发服务器上。如果您想将驱动程序存储在计算机的本地硬盘上,则必须执行一个将驱动程序复制到计算机的过程(例如,使用登录脚本、Microsoft Systems Management Server (SMS) 批处理作业或其他方法)。
2. 确定分发方法以后,获取这些设备驱动程序的路径。如果您要在本地复制它们,则路径可能会是 C:\Drivers\network adapter。如果要将它们复制到一个位于中心位置的服务器上,则路径可能是 \服务器名\驱动程序\network adapter(其中驱动程序 是共享文件夹)。
3. 本地计算机注册表中的 DevicePath 项必须更新,以反映出新的 OEM 驱动程序的位置。您必须设置一个远程更新此注册项的自动化方法。您可以将 Regedit 文件与登录脚本或 SMS 批处理作业结合使用。DevicePath 项的默认值位于下面的注册表项中:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\DevicePath:REG_EXPAND_SZ:%SystemRoot%\Inf
4. 使用 Regedt32.exe 编辑 DevicePath 项,以便让驱动程序所在的路径包括在搜索路径中。

警告:注册表编辑器使用不当可导致严重问题,可能需要重新安装操作系统。Microsoft 不能保证您可以解决因注册表编辑器使用不当而导致的问题。使用注册表编辑器需要您自担风险。

例如,如果将这些驱动程序本地复制到 %WinDir% 文件夹所在的驱动器上的根目录 (Drivers\network adapter),则 DevicePath 的最终值应是:
DevicePath:REG_EXPAND_SZ:%SystemRoot%\Inf;%SystemRoot%\Drivers\network adapter
如果这些驱动程序保存在位于中心位置的服务器或分发点上,您还要为 OEM 提供的驱动程序添加 UNC 路径。例如:
DevicePath:REG_EXPAND_SZ:%SystemRoot%\Inf;\\服务器名\共享名\Drivers\network adapter
注意:因为安装过程并不添加这些值,所以不会自动追加 %SystemRoot% 的值。在编辑注册表时,必须手动键入 %SystemRoot% 的值。
在您完成了这些步骤并且已安装新硬件后,当用户登录时,即插即用功能将找到此新硬件,并搜索您指定的设备路径以找到 OEM 提供的驱动程序。请注意,适用于签名/未签名驱动程序的所有规则也都适用于在执行安装程序后安装的设备。如果新设备的 OEM 提供的驱动程序未经数字签名,而且在安装此新硬件后登录到计算机上的用户不是管理员,则该用户将无法完成设备的驱动程序安装,直到有管理员登录到此计算机上。有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
219435 ( http://support.microsoft.com/kb/219435/) 无需管理员权限也可以加载和卸载设备驱动程序


注意:如果该设备已被操作系统识别为已知设备或未知设备,则在运行 sysprep 之前,您必须通过设备管理器删除该设备,否则在执行最小安装期间将不会安装更新的驱动程序。
回到顶端

参考资料: http://support.microsoft.com/kb/254078

提问人的追问   2009-11-05 09:17
哥们,你说了这么多,我看得头皮西昏,我要的是具体的制作过程
回答人的补充   2009-11-05 11:53
首先,倒数39分钟是在WINNT.SIF文件的[GuiUnattended]段的DetachedProgram 设置项实现的,如:DetachedProgram = "%SystemDrive%\TEMP\DRIVERS.EXE"
但是39分钟执行的程序是同步执行的,也就是说你执行的时候系统安装进程还在前进,这样是不行的,等你解压完驱动就晚了,所以我们需要下载下面几个文件:
NirCmd.exe 一种增强的DOS命令行工具
Process.exe 一种很强的进程管理程序,其中一个功能就是暂停某进程执行(相信知道在这里的用处了吧)
WatchDriverSigningPolicy.exe 关闭微软安装未通过验证的驱动时的提示
SetupCopyOEMInf.exe 扫描指定的驱动目录,并处理所有的.inf文件(复制指定的.inf文件到%windir%\Inf中),这样,Windows在检查硬件设备后将会找到所有的即插即用硬件的
驱动程序。
这几个有了以后就用一个批处理编写一段命令,过程就是先停止XP安装进程setup.exe,然后执行驱动选择、解压驱动,完毕后继续setup.exe安装进程就行了。

下面是我写的au3脚本:
Driver.exe是驱动选择工具,这段代码编译后的程序和驱动选择放在一个文件夹下就行了。

如果调用ylmf的驱动,还在在批处理或者au3代码里增加几行,下面是我的完整的调用ylmf驱动的au3代码:
我只希望给有用的人看,我相信看了有用的人,不在乎回帖这么简单的动作!
以下内容需要回复才能看到
#NoTrayIcon
$file = FileOpen(@HomeDrive & "\Ticker.ncl", 2)

FileWriteLine ( $file, "exec hide " & @ScriptDir & "\Process.exe -r
setup.exe")
FileWriteLine ( $file, ".wait 10000 ")
FileWriteLine (
$file, "exec hide " & @ScriptDir & "\Process.exe -p SetupCopyOEMInf.exe
high")
FileWriteLine ( $file, "exec hide " & @ScriptDir &
"\Process.exe -s setup.exe")
FileWriteLine ( $file, ".wait 50000 ")

FileWriteLine ( $file, ".script " & @HomeDrive & "\Ticker.ncl")

FileClose($file)
runwait(@ScriptDir & "\Process.exe -s
setup.exe","",@SW_HIDE)
runwait(@ScriptDir & "\Process.exe -p setup.exe
low","",@SW_HIDE)
run(@ScriptDir &
"\WatchDriverSigningPolicy.exe","",@SW_HIDE)
$file = FileOpen(@SystemDir
& "\oeminfo.ini", 2)
FileWriteLine ( $file,"Manufacturer=YLMF
GHOSTXP_SP2")
FileClose($file)
runwait(@ScriptDir & "\Driver.exe")

run(@ScriptDir & "\NirCmd.exe script " & @HomeDrive &
"\Ticker.ncl")
runwait(@ScriptDir & "\SetupCopyOEMInf.exe
C:\Driver","",@SW_HIDE)
runwait(@ScriptDir & "\Process.exe -k
NirCmd.exe","",@SW_HIDE)
runwait(@ScriptDir & "\Process.exe -p setup.exe
normal","",@SW_HIDE)
runwait(@ScriptDir & "\Process.exe -r
setup.exe","",@SW_HIDE)
FileDelete(@HomeDrive & "\Ticker.ncl")

FileDelete(@SystemDir & "\oeminfo.ini")

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多