无忧启动论坛

标题: 不要hwid又能怎样?硬盘控制器驱动只是一种服务 [打印本页]

作者: pseudo    时间: 2008-12-16 16:12
标题: 不要hwid又能怎样?硬盘控制器驱动只是一种服务
我在虚拟机中看服务,一大堆硬盘控制器驱动对应的服务都在。用到的有enum,没用到的有初始化失败字样。
这说明驱动、服务的加载与hwid无关,只要在scsi load里写有的都会加载,是否用得上是另一回事。

我把某个PE里的txtsetup.sif中,形如
PCI\VEN_8086&DEV_1222="intelide"
PCI\VEN_104B&DEV_1040="vmscsi"
的行删除,在虚拟机中启动,intelide、vmscsi服务下都有enum,虚拟机的scsi硬盘可识别。
看来,hwid并不那么必要,至少不那么恐怖。

推测:
1、驱动系以服务的形式起作用。驱动、服务的加载与hwid无关,是否用得上才与具体硬件有关。
2、txtsetup.sif中有hwid可以使硬件与驱动匹配的更精确,没有也不一定就不行,还可能按第3点匹配。
3、驱动文件本身包含的内容,或者它被加载到的group(你是在BusExtenders.Load还是在SCSI.Load加载的?),也能(或更能)决定它能跟什么硬件匹配。
4、根据3,可能存在不适当匹配的现象,因此,最好避免加载同类、近似的驱动。如果只加载了正确的驱动,匹配完全没问题(就算还有问题,修改注册表总能搞定)。hwid并不很重要,它只是为了精确匹配。
5、至于匹配并起作用的时机问题,转化为服务的依赖关系问题。如果启动过程没有其它重要必要的服务依赖于该驱动对应的服务,那么该驱动服务何时开启可能并不重要。这为进入PE桌面后才开启服务提供了可能。

结论:
硬盘控制器驱动,无论总线驱动还是设备驱动都只是一种服务而已,只要处理好服务的依赖关系很可能可以推迟到进入PE桌面后才加载,就像现在加载外置网卡一样(其中总线驱动可能要像NV网卡、HD声卡那样加载两次,这是具体问题了)。

这也许是解决硬盘控制器驱动外置、延后加载问题的理论依据。

chenall近日在WINPE下安装硬盘控制器驱动的做法符合上述1、3、5点,是合理的。
作者: wsw8810    时间: 2008-12-16 18:31
朋友,我不赞成你的说法...你和chenall说法太片面了.完全没有任何依据,而且是在虚拟机中做的测试.不能让人信服.还有就是对WINDOWS系统的"服务"理解不够...请问在UNIX下.没有SYS文件.驱动怎么加载? 你们把SYS文件看得太"轻松"了吧.决定SYS不是"服务"启不启动它,而是里面SYS里面的函数,调用的是WINDOWS系统自带的API,还是最终实现硬件HAL层的伪指令.不扯远了.说简单一点.还记得安装RAID驱动吗?为什么要在安装系统之前按F6进行安装,如果按照你们的说法,服务加载而以,为什么不在系统安装好后,进入系统了在进行安装.老一点的服务器安装RAID的时候必须要在安装系统之前把RAID驱动安装好,再来安装系统,现在新一代的服务器包括刀片式的服务器都提供了在系统下安装RAID的程序光盘.但安装好后必须要重启.进行设置.WINPE重启意味着什么?.如果你们安装过服务器的SCSI硬盘或SAS硬盘,就不会说出这种话了...追求技术是好,但打肿脸充胖子可就不好了.一些网友根本没接触过,就长篇大论.还把在虚拟机的测试结果发表出来证明...虚拟机说白了只是一个伪代码的运行环境.跟JAVA是一个道理.我还能用U盘在虚拟机下设置成SCSI硬盘使用,还不用装驱动.现实的环境中行吗?
作者: wsw8810    时间: 2008-12-16 19:03
在举个精典的例子.大家都知道"灰鸽子"这个木马吧.他最大特色是国内首先采用隐藏主进程的木马,为什么能隐藏进程.就是木马修改了全局钩子,把系统标准的API函数地址指向了自己编写的函数,从而拦截了窗口消息,达到隐藏进程和杀不死的效果...这个原理跟UNIX中缓冲溢出是一样的,控制系统指针.但是你要控制系统指针就要有相当的权限,正好系统的驱动程序权限可以做到.但有个问题以驱动程序加入到系统中,会虚拟出一个设备,但此设备并不会马上起作用.非要等系统重启后,加载这个设备才能调用相关的SYS文件中的模块,注入到系统进程...所以,中了"灰鸽子",只要不重启电脑,就能找出"灰鸽子"虚拟出来的串口设备,从而找到主文件删除.在把相关启动项也给删除就OK了.一但重启电脑就麻烦了.系统函数被修改成"灰鸽子"的函数地址,你进系统看到的都是"灰鸽子"做出来的假象,当然你怎么杀,也杀不死它了...只有在安全模式下才能删除,因为安全模式不加载低层硬件驱动.当然"灰鸽子"也会破坏掉安全模式.这个时候我们PE就派上用场了.在安全模式下或者PE中使用辅助软件把系统的函数地址恢复到正常的地址后,"灰鸽子"的原形就出来了...这个时候KILL它就简单了.
卡巴从7.0开始就跟"灰鸽子"一样了.先入为主,先抢占系统最高权限的驱动,先把自己的驱动文件加载到系统中,先把WC占了,不管怎么,还是要重启电脑才能占这个WC啊.HEHE.这个时候"灰鸽子"一进来,卡巴就知道此程序是有危险的.因为这个WC一般人是不会来的,能来这里的人,都是很危险的人..然后从自己的病毒代码库中调用病毒特征码对此程序进行扫描对比.如果找到就显示出相关的病毒名称.如果没有找到就提示此程序有危险,请用户自己选择.但是不管你怎么选择,只要你先安装了卡巴.卡巴是永远不会让出这间WC让给其它人的.HEHE.卡巴的自我保护功能也是这个道理.如果先让"灰鸽子"占了这间WC,哪卡巴就没法了.
作者: holts    时间: 2008-12-16 19:12
朋友,你说的很对,不过创新总是在不断探索中实现的,从这个意义上说,我支持LZ和chenall。
作者: pseudo    时间: 2008-12-16 20:03
标题: 回复 #2 wsw8810 的帖子
朋友,”打肿脸充胖子“这句话属人身攻击,很不友好, 请收回。

论坛就是大家把自己的观点说出来的地方,不管对错、别人是否赞同、信服。大家平等交流,经验丰富、水平高的不要剥夺经验少的、水平低的发言权。不同观点,对错可以讨论甚至争论,人身攻击的不要。

我和chenall的说法可能真的如你说的太片面了,但目前还不同意你说的"完全没有任何依据"。都是做了实验的,虽然实验可能很有限(这也是环境条件有限所致),由此归纳、推测的结果,包括推理的方法也许都有错,但在认识提高之前,都是自以为是的推理和归纳。发表出来进行交流。我喜欢举一就反三,凭空大胆推测下结论,方式较武断。你的风格可能低调,谦称自己才"开始懂了",但希望你能容忍别的风格存在。

chenall是经验丰富、有贡献的人士,他的观点值得重视。我的观点自认为能解释其做法。有错请指正。
作者: 仙乃日    时间: 2008-12-16 20:10
驱动是以服务的形式被加载,这点应该是肯定的。有些驱动文件除了SYS文件外,还有些DLL。当一个驱动服务项下有“性能”分支时,这个驱动就应该带有DLL文件。hwid有时是可以省略,但有时是不行的。最明显的例子就是“ISAPNP”这个驱动,有兴趣的一试便知。有些驱动的服务项还写有类似于哈希值密码的东东,用于驱动签名验证和控制该驱动访问硬件(或者其他驱动)。
作者: wsw8810    时间: 2008-12-16 21:23
原帖由 pseudo 于 2008-12-16 20:03 发表
朋友,”打肿脸充胖子“这句话属人身攻击,很不友好, 请收回。

论坛就是大家把自己的观点说出来的地方,不管对错、别人是否赞同、信服。大家平等交流,经验丰富、水平高的不要剥夺经验少的、水平低的发言权 ...


pseudo 对不起,我收回哪句话,我太过冲动了.不好意思.我这人就爱犯这毛病...经常跟同事争论也会出现这种情况.请谅解.

对于技术的问题.其实都有很多争执的地方,关于总线驱动加载的问题,在虚拟机下不可否认,你和chenall所说的方法特定条件下可行的.也许这正是我们风格之间的差异吧...我注重的是现实环境和多次真实环境测试的结果才能证明或者说明一个问题.我们看待问题方法不一致.其实论坛就是给我们这些人来交流的,争执是很正常的.但进行人身攻击确实是不对.我得改改这老毛病了.
作者: netwinxp    时间: 2008-12-16 21:40
你把setupreg.hiv里面与相关硬件的含有HWID的项删除看还能不能识别?
作者: chenall    时间: 2008-12-16 21:46
不好意思,让你们因为我的原因起争执...
不过现在说这些又没有什么意义,
谁能确定可行,,,谁又能确定不可行,,,,

现在下结论尚早,与其花时间争论,倒不如花点时间进行实践.用实际行动来说明问题,这不是更好吗?

对于wsw8810 的说法,如果是以前的我,也许我会生气,可是现在我已经对这些已经无所谓了(我觉得和不点有点像^_^)

走自己的路,让别人说去吧.
作者: wsw8810    时间: 2008-12-16 21:50
现在不点的GRUB4DOS已经进入终结版的收尾工作了...一但定型了.我到是有个想法是否能像GRUB加载USB2.0驱动一样,加载南桥驱动...难度较大.到时候还要去时空请教..
作者: qqnngg    时间: 2008-12-16 21:56
各位不知道试过MSDaRT6.0做出的PE没有?它可以启动后加载SCSI和LAN驱动,当然它是PE2.0
的,它的驱动方式可以借鉴看看能不能用到PE 1.x中。另chenall的fd1加载外置驱动很实用,解决了没有软驱的大问题,我的服务器就是用它搞定的,呵呵。
作者: pseudo    时间: 2008-12-16 22:17
标题: 回复 #8 netwinxp 的帖子
呵呵,我才不去删除setupreg.hiv的HWID找死呢,#6楼说的ISAPNP我也不动。我只是发现hwid没以前以为的那么重要。
如果有一批hwid可以删去,txtsetup.sif就简化了。
作者: wsw8810    时间: 2008-12-16 22:19
原帖由 qqnngg 于 2008-12-16 21:56 发表
各位不知道试过MSDaRT6.0做出的PE没有?它可以启动后加载SCSI和LAN驱动,当然它是PE2.0
的,它的驱动方式可以借鉴看看能不能用到PE 1.x中。另chenall的fd1加载外置驱动很实用,解决了没有软驱的大问题,我的服 ...


chenall的外置加载确实非常实用...
作者: pseudo    时间: 2008-12-16 22:22
原帖由 wsw8810 于 2008-12-16 21:23 发表
pseudo 对不起,我收回哪句话,我太过冲动了.不好意思.我这人就爱犯这毛病...经常跟同事争论也会出现这种情况.请谅解.
...

你既收回那句话,咱们和好,忘掉不愉快的事。
作者: 66369    时间: 2008-12-16 22:26
虚拟机不可信.建议实测一下.
作者: pseudo    时间: 2008-12-16 22:50
原帖由 66369 于 2008-12-16 22:26 发表
虚拟机不可信.建议实测一下.


adatsui 在實機 IBM X3200 上進行的试验似乎有利于我的观点。
作者: netwinxp    时间: 2008-12-16 22:53
真的不需要HWID吗?你试试将setupreg.hiv里面的CriticalDeviceDatabase相关项删除看还能不能识别!
作者: chenall    时间: 2008-12-16 23:06
原帖由 netwinxp 于 2008-12-16 22:53 发表
真的不需要HWID吗?你试试将setupreg.hiv里面的CriticalDeviceDatabase相关项删除看还能不能识别!


这些好像是系统自动生成的吧,
作者: wsw8810    时间: 2008-12-16 23:25
原帖由 pseudo 于 2008-12-16 22:50 发表


adatsui 在實機 IBM X3200 上進行的试验似乎有利于我的观点。


我在怀疑adatsui的系统.在IBM的服务器上使用DELL的SAS驱动...而且倒数第二张贴图.意思是安装好驱动后**感叹号没有了...但实际在"完成"这个画面,却是**问号.经常装驱动的朋友应该清楚吧.在装完驱动后最后一个画面点"完成"按钮的时候.这个时候如果还是显示**问号,哪么在设备管理器中依然是**问号.然而adatsui 的帖图在"完成"这个画面的时候是**问号.在设备管理器的时候就没有问号了.....难道是我的错觉...我用同样的方法在三星SATA硬盘上加载原厂驱动.失败...难道还有兼容性这一说法...

[ 本帖最后由 wsw8810 于 2008-12-16 23:30 编辑 ]
作者: wsw8810    时间: 2008-12-16 23:33
原帖由 netwinxp 于 2008-12-16 22:53 发表
真的不需要HWID吗?你试试将setupreg.hiv里面的CriticalDeviceDatabase相关项删除看还能不能识别!


setupreg.hiv里面不要HWID是肯定不能识别的.这点NETWINXP没有说错哦.看来此贴得换个标题了.否则会引起很多网友的猜疑.HEHE.有争执才有技术上的进步...三人行必有我师.学习ing...
作者: netwinxp    时间: 2008-12-17 00:12
CriticalDeviceDatabase肯定不是自己生成的。
作者: adatsui    时间: 2008-12-17 06:53
然而adatsui 的帖图在"完成"这个画面的时候是**问号.在设备管理器的时候就没有问号了.....难道是我的错觉.


你可以明確地說, 錯覺 何解嗎 ?

我是否用了 dell 的驅動在 IMB 機上, 我也不確定, 我是用了 LSI 的驅動在 LSI 的卡上.  
我再做了測試, 用另一安裝方法, 都是進了 PE後才裝的, 也是成功可讀寫, 建新文件的.  

经常装驱动的朋友, 替我看看有用錯驅動沒有.
;
; SYMMPI.INF - version XP.10 (Windows XP)
;
; This is the INF file for Windows XP for the SYMMPI based PCI MPI
; environment
;
; ********************************************************************
;                                                                    *
;   Copyright 2005 LSI Logic, Inc. All rights reserved.              *
;                                                                    *
;   This file is property of LSI Logic, Inc. and is licensed for     *
;   use as is.  The receipt of or possession of this file does not   *
;   convey any rights to modify its contents, in whole, or in part,  *
;   without the specific written consent of LSI Logic, Inc.          *
;                                                                    *
; ********************************************************************

[version]
signature="$Windows NT$"
Class=SCSIAdapter
ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
Provider=%LSI%
DriverVer=04/19/2007,1.25.05.00
CatalogFile.ntx86=mpixp32.cat

[DestinationDirs]
DefaultDestDir = 12 ; DIRID_DRIVERS

[SourceDisksFiles.x86]
symmpi.sys = 1
lsipseud.inf = 1

此 inf 餘下省略.


lsipseud.inf
; Copyright (c) 1993-1997, Microsoft Corporation

[Version]
Signature="$WINDOWS NT$"
Class=System
ClassGuid={4D36E97D-E325-11CE-BFC1-08002BE10318}
Provider=%LSI%
DriverVer=07/27/2006,6.2.1
CatalogFile.ntx86=mpixp32.cat

[SourceDisksFiles]

[SourceDisksNames]

[ControlFlags]
ExcludeFromSelect = *

[Manufacturer]
%LSI%=LSI
%IBM%=IBM

[LSI]
%Pseudo.DeviceDesc% = NODRV, SCSI\BridgeLSI_____PSEUDO_DEVICE___
%SASx28.DeviceDesc% = NODRV, SCSI\EnclosureLSILOGICSASX28_A.0______
%SASx36.DeviceDesc% = NODRV, SCSI\EnclosureLSILOGICSASX36_A.0______

[IBM]
%SAS_SES.DeviceDesc% = NODRV, SCSI\EnclosureIBM_____SAS_SES-2_DEVICE01.0

[NODRV]

[NODRV.Services]
AddService = , %SPSVCINST_ASSOCSERVICE%

[Strings]
LSI = "LSI Logic"
IBM = "IBM Corporation"
Pseudo.DeviceDesc = "LSI Pseudo Device"
SASx28.DeviceDesc = "LSI Logic SAS x28 Expander"
SASx36.DeviceDesc = "LSI Logic SAS x36 Expander"
SAS_SES.DeviceDesc = "IBM SAS SES Device"

;*******************************************
;Handy macro substitutions (non-localizable)
SPSVCINST_ASSOCSERVICE = 0x00000002

[ 本帖最后由 adatsui 于 2008-12-17 06:58 编辑 ]
作者: 仙乃日    时间: 2008-12-17 10:00
原帖由 chenall 于 2008-12-16 23:06 发表


这些好像是系统自动生成的吧,

这话应该不太全面。在XP的全新安装中,系统安装程序会进行“完全的即插即用枚举”。此时系统安装程序会自动添加HWID到CriticalDeviceDatabase中。而PE启动过程或者进入桌面时所进行的驱动安装,不是“完全的即插即用枚举”,对一些总线驱动不会再自动添加HWID到CriticalDeviceDatabase中。还是以"ISAPNP"为例,这个驱动有2种模式:一个是ISA模式,另一种是PCI模式。如果只存有ISA模式的HWID,那对于现在的绝大多数的机子,PS2接口的键盘鼠标全不不可用的。因为PS2接口的键盘鼠标就是挂在"ISAPNP"这个驱动上的。
作者: wsw8810    时间: 2008-12-17 12:02
原帖由 adatsui 于 2008-12-17 06:53 发表


你可以明確地說, 錯覺 何解嗎 ?

我是否用了 dell 的驅動在 IMB 機上, 我也不確定, 我是用了 LSI 的驅動在 LSI 的卡上.  
我再做了測試, 用另一安裝方法, 都是進了 PE後才裝的, 也是成功可讀寫 ...


HEHE.我所说的"错觉"就是在设备驱动安装完成后.在点击"完成"按钮这个画面.如果驱动正常安装,设备也正常识别了,哪么"完成"这个窗口中的文字大概是"设备安装成功,可以正常使用"这几个字,而且图标也是相应的硬件标识图标.然而,驱动和设备不符合的情况下,到了"完成"这步,就会出现设备无法识别.图标就是黄问号了.设备管理器里面同样也显示黄问号...所以你的贴图让我产生了"错觉"

关于硬盘驱动的问题.因为我在做PE内核的时候,手动添加驱动时遇到过symmpi.sys的驱动,我也从DELL的驱动中提取出来symmpi.sys如下所示:

[SCSI.Load]
iastor = iastor.sys,4
a320raid = A320RAID.SYS,4
aac = aac.sys,4
cercsr6 = cercsr6.sys,4
cercsr6 = afamgt.sys,4
aarich = aarich.sys,4
nvatabus = NvAtaBus.sys,4
nvraid = nvraid.sys,4
symmpi = symmpi.sys,4

[SCSI]
nvraid   = "NVIDIA RAID CLASS DRIVER"
nvatabus = "NVIDIA NForce Storage Controller"
iastor = "Intel Matrix Storage Manager"
a320raid = "Adaptec U320 SCSI HostRAID Controller"
cercsr6 = "DELL CERC SATA 1.5/6ch RAID Controller"
aarich = "Adaptec Embedded Serial ATA HostRAID Controller"
aac = "PERC 320/DC SCSI RAID Controller"
symmpi = "DELL PERC5 RAID Controller Driver (Windows XP)"


希望你不要误会.虽然从电脑启动过程和总线驱动的原理上Chenall的方法是不可行的.但经过你的测试能成功.哪就证明了有可能性.目前我的测试没成功,也没找到问题的所在.我只有采用排除法,把你的PE内核跟我用的PE内核作个对比.就知道问题所在了...
如果有其它朋友也测试成功了,请告知于我.先谢谢了.

[ 本帖最后由 wsw8810 于 2008-12-17 12:05 编辑 ]
作者: netwinxp    时间: 2008-12-17 18:23
以挂PCI/PCIE总线的硬盘控制器为例——
[HYLM\SYSTEM\CurrentControlSet\Enum]那些其实是系统自动检测产生的带HWID的项(对于即插即用设备来说),然后具体的每项才会根据提供的驱动程序去[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service]去找对应的服务文件。而以前安装过的驱动则会在[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase]下面产生一个与Enum类似的项。之所以txtsetup.sif里面没有提供hwid也可以驱动,是因为很多集成驱动的XP把驱动hwid与对应的服务加到CriticalDeviceDatabase,于是如果有未知设备,没有提供驱动,它就会去CriticalDeviceDatabase找。
上面提到的若干主键其实就是把HWID和对应的服务联结在一起的桥梁。不过酱紫的做法根据R版所说,可能会产生一些“幽灵”设备,有一定的BUG。
如果还认为HWID不重要的话,可以用微软的原版PE改改看能不能行得通!
作者: wsw8810    时间: 2008-12-17 19:24
原帖由 netwinxp 于 2008-12-17 18:23 发表
以挂PCI/PCIE总线的硬盘控制器为例——
[HYLM\SYSTEM\CurrentControlSet\Enum]那些其实是系统自动检测产生的带HWID的项(对于即插即用设备来说),然后具体的每项才会根据提供的驱动程序去[HKEY_LOCAL_MACHINE\S ...


学习了...
作者: cnn_5454    时间: 2008-12-17 19:51
标题: 回复 #11 qqnngg 的帖子
chenall的fd1加载外置驱动的东西我正在努力总,目前已经收集和很多驱动。

现在我在收集主板的型号。

我尝试GRUB来识别主板反馈的型号ID,让后截获这个ID,在驱动库里加载。找到之后,自动挂载。我的这个试验,希望也能给大家一点儿启发

大家一起为PE的明天努力吧
作者: wsw8810    时间: 2008-12-17 21:52
原帖由 cnn_5454 于 2008-12-17 19:51 发表
chenall的fd1加载外置驱动的东西我正在努力总,目前已经收集和很多驱动。

现在我在收集主板的型号。

我尝试GRUB来识别主板反馈的型号ID,让后截获这个ID,在驱动库里加载。找到之后,自动挂载。我的这个试 ...


如果只用GRUB虚拟出一个软盘映像,很难做到兼容性很全的驱动...但是如果把镜像做大了,加载速度是相当慢的.关于DOS下用批处理判断南桥总线类型和型号在自动加载相应驱动.不知道能否实现...批处理真的有这么强大吗?
作者: netwinxp    时间: 2008-12-17 22:26
DOS P处理肯定是没有那么强的功能,不过配合硬件检测软件还是可以的。俺滴CHKPCI.COM就是为这个目的编写的。

[ 本帖最后由 netwinxp 于 2008-12-17 22:27 编辑 ]
作者: pseudo    时间: 2008-12-17 23:12
标题: 回复 #29 netwinxp 的帖子
照版主的CHKPCI.COM和硬盘方案,hwid等内容好像只用于txtsetup.sif吧。是否还要修改setupreg.hiv?
上述方案里的hwid行能否从txtsetup.sif中删除(其它行保留)?
作者: pseudo    时间: 2008-12-17 23:43
标题: 回复 #28 wsw8810 的帖子
外置驱动包,DOS下判断南桥总线类型和型号在自动加载相应驱动.已经实现。收录的驱动是否全是另一回事。
作者: netwinxp    时间: 2008-12-17 23:56
原帖由 adatsui 于 2008-12-17 06:53 发表
你可以明確地說, 錯覺 何解嗎 ?
我是否用了 dell 的驅動在 IMB 機上, 我也不確定, 我是用了 LSI 的驅動在 LSI 的卡上.  
我再做了測試, 用另一安裝方法, 都是進了 PE後才裝的, 也是成功可讀寫 ...

你的这个驱动仅仅是辅助的驱动,另外一个带有VEN_xxxx&DEV_xxxx&CC_xxxx才是主要的磁盘控制器驱动。
作者: adatsui    时间: 2008-12-18 00:21
是的, 第一個驅動才是主要的, 我把後面省略了貼出來.....

這驅動我是由網上隨便下載的, 反正我見 PCI\VEN_....DEV_ 與機內所見致, 我便用上了.  跟隨機送來的 OS 是 2003 所以並沒隨 XP 的驅動, 而這個卡 2003 與 XP 的驅, 連名字也不同.  
lsi_sas.sys for 2003
symmpi.sys for xp

反正進入PE後用手動的方式加載是成的, 讀寫正常, 只是有人說這是給 dell 的驅動, 我才問問有沒用錯.
作者: 616232671    时间: 2008-12-18 07:04
驱动的确有以服务方式加载的,但是我不懂


比如, 正常系统的 蜂鸣,是一个服务,但是,也只是一个驱动
作者: 沙漠之子    时间: 2008-12-18 08:09
原帖由 netwinxp 于 2008-12-16 22:53 发表
真的不需要HWID吗?你试试将setupreg.hiv里面的CriticalDeviceDatabase相关项删除看还能不能识别!


CriticalDeviceDatabase这个键 是用来储存当前硬件设备数据信息的

对于PE来说 是在启动的时候根据txtsetup.sif设定自动建立的

即注册表CriticalDeviceDatabase中与txtsetup.sif中相同的部分会被txtsetup.sif中的设定覆盖的 txtsetup.sif中没定义的部分则保留原(注册表CriticalDeviceDatabase中)设定

例外:CriticalDeviceDatabase下记录的东东
非具体的hwid 他是一个类
是多对一的关系,当然对于具体的某一台机器 也应该一个硬件对一个值
即换其他机子(硬件不同)也可能匹配
这个就是在设备管理器中的"匹配设备ID"

Enum 记录的是具体的hwid和硬件id
具体的hwid换其他机子(硬件不同)是不能匹配的
硬件id是可以多个类似的硬件匹配一个硬件id


其中具体的hwid就是在设备管理器中的"设备范例ID"

[ 本帖最后由 沙漠之子 于 2008-12-18 09:07 编辑 ]
作者: 沙漠之子    时间: 2008-12-18 08:15
驱动和服务的注册项的确很相似
但是最大的区别是
驱动的ImagePath是*.sys
服务的ImagePath是*.exe

故加载的主体也不一样吧
作者: 沙漠之子    时间: 2008-12-18 08:53
在[HardwareIdsDatabase]中
即可使用硬件id也可使用兼容id 比配设备id

常用硬件id和匹配设备id
其中匹配范围
匹配设备id >硬件id

一般不直接使用设备范例ID 这个没通用性的

匹配设备id一般
*xxx 或xxx

硬件id
xx\xxxx

[ 本帖最后由 沙漠之子 于 2008-12-18 08:56 编辑 ]
作者: 66369    时间: 2008-12-18 11:05
关注这里......
作者: wsw8810    时间: 2008-12-18 12:09
原帖由 pseudo 于 2008-12-17 23:43 发表
外置驱动包,DOS下判断南桥总线类型和型号在自动加载相应驱动.已经实现。收录的驱动是否全是另一回事。


我想问的是.是用批处理.不借助其它DOS下的程序(如果要仿效,蕃茄花园和深度的安装盘中已经有实例了.)...因为我想学习一下批处理操作低层的方法
作者: netwinxp    时间: 2008-12-18 12:23
驱动也是服务,和DOS不同,WINDOWS的程序、驱动、动态链接库甚至是RES资源都可以看成TSR,采用事件激活,遇到事件才激活相应的模块,退出程序也只不过是一个特殊的事件。
*xxx或xxx其实仅是ACPI或BIOS层次的ID。
硬件层次的ID,一般包含:总线类型\VID&PID&SID&CC&RID。
硬件ID本身并没有分什么具体不具体的HWID,只不过是驱动的inf并不需要囊括上面的HWID各个字段,ENUM内的咚咚则是根据NTDETECT检测到的硬件信息自动添加一个完整的HWID(机子里面的每个pnp硬件设备都会再这产生一个具有完整HWID的项),WINDOWS会自动匹配最接近这个HWID的驱动项(空的字段被认为是匹配的,不过优先度低于真正的匹配,有任何一项不匹配都被认为整个不匹配)。CriticalDeviceDatabase并不是txtsetup.sif或ntdetect产生的,它是以前装过的驱动留下的(含被加工成PE的原本XP装过的驱动)。
比如我们的txtsetup.sif里面有PCI\&CC_0101、PCI\VEN_10DE&DEV_0065,那么具体硬件PCI\VEN_10DE&DEV_0065&SUBSYS_10001659&REV_A2就会使用第二个项,还须注意的一个就是HWID没显示的设备类别CC_xxxx,如果不匹配就不会去使用,比如RAID就不会去试图匹配&CC_0101的项。
我想问的是.是用批处理.不借助其它DOS下的程序

DOS本身并没有检测硬盘控制器的功能。一些论坛的XP安装,使用的是带电源检测功能的NTLDR来完成,它们并不是DOS程序,在DOS下也运行不了。
***P处理其实仅仅是调用其他程序或系统内部命令,它本身并没有多少东西,更不可能有直接操作底层的功能***

[ 本帖最后由 netwinxp 于 2008-12-18 13:29 编辑 ]
作者: liuhj    时间: 2008-12-18 12:36
注册表CriticalDeviceDatabase下的项目可能不是由txtSetup.sif生成的。实验如下:

我的PE中注册表[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase]下添加了三个项目:PS2_KEYBOARD、PS2_MOUSE和root#swenum三个项目。PE启动到引导程序(ReatogoLogon.exe),还没有进行“Bartpe.exe -pnp”或“HWPNP.EXE”之前打开注册表,[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase]下依然是三个项目,但是进入桌面之后,[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase]下的项目有十几项。这十几项除了内集的三项之外都是系统安装驱动时生成的。
作者: netwinxp    时间: 2008-12-18 13:33
原帖由 liuhj 于 2008-12-18 12:36 发表
注册表CriticalDeviceDatabase下的项目可能不是由txtSetup.sif生成的。实验如下:
我的PE中注册表[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase]下添加了三个项目:PS2_KEYBOAR ...

没错,只有enum才是自动生成的,CriticalDeviceDatabase其实是添加进去的,AHCI驱动添加P处理、各论坛GHOST系统也是根据这个道理来制作的。我曾经试过强行添加不完整的HWID enum项,结果系统启动出现故障。

[ 本帖最后由 netwinxp 于 2008-12-18 13:35 编辑 ]
作者: pseudo    时间: 2008-12-18 18:52
原帖由 liuhj 于 2008-12-18 12:36 发表
...进入桌面之后,[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase]下的项目有十几项...

我在PE中,我怎么没有看到CriticalDeviceDatabase

未命名.JPG (54.14 KB, 下载次数: 70)

未命名.JPG

作者: liuhj    时间: 2008-12-18 19:23
原帖由 pseudo 于 2008-12-18 18:52 发表

我在PE中,我怎么没有看到CriticalDeviceDatabase


我为了增强PE对硬件的支持能力在这个地方加了三个键值(不敢多加,怕影响在不同机器运行),进入桌面后,这地方就会有十二键值。

cdd.JPG (50.74 KB, 下载次数: 72)

cdd.JPG

作者: pseudo    时间: 2008-12-18 19:29
标题: 回复 #44 liuhj 的帖子
不是说CriticalDeviceDatabase下有多少东西的问题,我这里Control下压根就没有CriticalDeviceDatabase
作者: liuhj    时间: 2008-12-18 19:33
即便是使用插件制作PE,也没有这个键,我为了增强PE对硬件的支持能力添加了这个注册表项和其下的三个键值:PS2_KEYBOARD、PS2_MOUSE和root#swenum。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3