无忧启动论坛

标题: 为从注册表判断硬盘接口类型,请帮我看一下注册表这个位置 [打印本页]

作者: victor888    时间: 2009-9-19 12:08
标题: 为从注册表判断硬盘接口类型,请帮我看一下注册表这个位置
这个贴子的主要目的是协助liangjiang的gghost在进行GHOST时能够自动确定是否使用NOIDE参数。

GOOGLE半天,似乎这个键值能判断硬盘接口类型,即IDE\SATA\SCSI等。

WIN7下看这个项:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci下面的start值,
这是一个16进制的值,麻烦大家报告你的硬盘类型(上面三种),操作系统,以及start值括号内的数字。

XP下看这个项:HKEY_LOCAL_MACHINE\System\ControlSet001\Services\Msahci


如果是真正SATA硬盘,那么这个start值应该是0,在WIN7下是这样,不知道XP是不是。

我的硬盘虽然也是SATA接口,标称为SATA盘,很可能是那种IDE口转接的SATA硬盘,即非真正的SATA硬盘,WIN7下,这个start值是3,标示的也是IDE类型。

我现在想知道这样几种情况:

1. 纯IDE硬盘,这个值start值是多少,系统是什么;
2. 纯SATA硬盘,在开启了AHCI情况下,这个值start值是不是0,系统是什么;
3. IDE转接口的SATA硬盘,这个值是不是3,系统是什么;
4. 纯SCSI硬盘,这个值start值是多少,系统又是什么。

[ 本帖最后由 victor888 于 2009-9-19 14:10 编辑 ]
作者: lianjiang    时间: 2009-9-19 12:18
谢谢你的努力。

这个问题,没有众人的参与是不行的。
作者: victor888    时间: 2009-9-19 12:53
目前可以判断硬盘接口类型的软件我只知道everest,我估计它也可能是通过硬盘序号根据数据库得出的。直接编程获取,或用WIN自带的工具获取的方法我还是寻找中。
作者: jxf268    时间: 2009-9-19 12:57
我xp3的注册表中没有这个注册表项
作者: victor888    时间: 2009-9-19 13:00
你的是什么类型的硬盘?
作者: jxf268    时间: 2009-9-19 13:16
是SATA接口,只有80G,不知道算不算SATA硬盘。
作者: 七仙花    时间: 2009-9-19 13:16
原帖由 jxf268 于 2009-9-19 12:57 发表
我xp3的注册表中没有这个注册表项


我的XPSP3也没有 Msahci  这个项,我的是标准的IDE硬盘。
还有在XP的注册表中HKEY_LOCAL_MACHINE\System\CurrentControlSet1 项与 HKEY_LOCAL_MACHINE\System\CurrentControlSet 项是对应的,你把 \CurrentControlSet1 的内容删除或修改了,那么 \CurrentControlSet 的对应内容也会自动删除或修改。
作者: victor888    时间: 2009-9-19 13:26
在别人的提醒下找一个软件,CRYSTALDISKINFO,带源码:http://crystalmark.info/?lang=en

===

atasmart.cpp文件内有各种磁盘接口类型的判断。

[ 本帖最后由 victor888 于 2009-9-19 13:40 编辑 ]
作者: victor888    时间: 2009-9-19 13:28
标题: 回复 #6 jxf268 的帖子
要么是IDE转接类型,要么是在BIOS里以兼容模式运行。GHOST是无法在纯SATA硬盘上运行的。
作者: 七仙花    时间: 2009-9-19 14:00
在XP下找到这个  
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\atapi]
"ErrorControl"=dword:00000001
"Group"="SCSI miniport"
"Start"=dword:00000000
"Tag"=dword:00000019
"Type"=dword:00000001
"DisplayName"="标准 IDE/ESDI 硬盘控制器"

不知对你是否有用。
作者: victor888    时间: 2009-9-19 14:08
谢谢楼上,看来XP下和WIN7下相同的start值并不代表相同接口类型硬盘,XP下0代表IDE,WIN7下应该代表SATA。
作者: victor888    时间: 2009-9-19 14:11
jxf268麻烦再看一下HKEY_LOCAL_MACHINE\System\ControlSet001\Services\Msahci项下的start值,谢谢。
作者: sgw888    时间: 2009-9-19 14:16
我的XP SP3下面也没有这个键值.
作者: 七仙花    时间: 2009-9-19 14:25
原帖由 victor888 于 2009-9-19 14:11 发表
jxf268麻烦再看一下HKEY_LOCAL_MACHINE\System\ControlSet001\Services\Msahci项下的start值,谢谢。



楼主,你搞错了,在XP下是没有这个项的,请看我在7楼的回复。
作者: jxf268    时间: 2009-9-19 14:36
标题: 回复 #12 victor888 的帖子
XP下没有这个项,也许我那硬盘不是真正的SATA
作者: lianjiang    时间: 2009-9-19 15:00
我的xp也没有斑竹说的键值。
作者: lianjiang    时间: 2009-9-19 15:17
原帖由 victor888 于 2009-9-19 13:26 发表
在别人的提醒下找一个软件,CRYSTALDISKINFO,带源码:http://crystalmark.info/?lang=en

===

atasmart.cpp文件内有各种磁盘接口类型的判断。


下载了,没找到有atasmart.cpp文件。
作者: victor888    时间: 2009-9-19 16:22
标题: 回复 #17 lianjiang 的帖子
你需要下载源码,不是软件。
作者: lianjiang    时间: 2009-9-19 17:04
原帖由 victor888 于 2009-9-19 16:22 发表
你需要下载源码,不是软件。


明白了。可惜对编程一无所知,不知道如何利用。
假如那个软件支持命令行的话,用起来就方便些了。
作者: victor888    时间: 2009-9-19 19:25
crystaldiskinfo源码中判断ATA盘类型的语句在这儿:
DWORD CAtaSmart::GetTransferMode(WORD w63, WORD w76, WORD w88, CString &current, CString &max, CString &type, INTERFACE_TYPE* interfaceType)
{
        DWORD tm = TRANSFER_MODE_PIO;
        current = max = _T("");
        type = _T("Parallel ATA");
        *interfaceType = INTERFACE_TYPE_PATA;

        // Multiword DMA or PIO
        if(w63 & 0x0700)
        {
                tm = TRANSFER_MODE_PIO_DMA;
                current = max = _T("PIO / DMA");
        }

        // Ultara DMA Max Transfer Mode
                 if(w88 & 0x0040){tm = TRANSFER_MODE_ULTRA_DMA_133; max = _T("Ultra DMA/133");}
        else if(w88 & 0x0020){tm = TRANSFER_MODE_ULTRA_DMA_100; max = _T("Ultra DMA/100");}
        else if(w88 & 0x0010){tm = TRANSFER_MODE_ULTRA_DMA_66;  max = _T("Ultra DMA/66");}
        else if(w88 & 0x0008){tm = TRANSFER_MODE_ULTRA_DMA_44;  max = _T("Ultra DMA/44");}
        else if(w88 & 0x0004){tm = TRANSFER_MODE_ULTRA_DMA_33;  max = _T("Ultra DMA/33");}
        else if(w88 & 0x0002){tm = TRANSFER_MODE_ULTRA_DMA_25;  max = _T("Ultra DMA/25");}
        else if(w88 & 0x0001){tm = TRANSFER_MODE_ULTRA_DMA_16;  max = _T("Ultra DMA/16");}

        // Ultara DMA Current Transfer Mode
                 if(w88 & 0x4000){current = _T("Ultra DMA/133");}
        else if(w88 & 0x2000){current = _T("Ultra DMA/100");}
        else if(w88 & 0x1000){current = _T("Ultra DMA/66");}
        else if(w88 & 0x0800){current = _T("Ultra DMA/44");}
        else if(w88 & 0x0400){current = _T("Ultra DMA/33");}
        else if(w88 & 0x0200){current = _T("Ultra DMA/25");}
        else if(w88 & 0x0100){current = _T("Ultra DMA/16");}

        // Serial ATA
        if(w76 != 0x0000 && w76 != 0xFFFF)
        {
                current = max = _T("SATA/150");
                type = _T("Serial ATA");
                *interfaceType = INTERFACE_TYPE_SATA;
        }

                 if(w76 & 0x0010){tm = TRANSFER_MODE_UNKNOWN;  current = max = _T("Unknown");}
        else if(w76 & 0x0008){tm = TRANSFER_MODE_SATA_600; current = max = _T("SATA/600");}
        else if(w76 & 0x0004){tm = TRANSFER_MODE_SATA_300; current = max = _T("SATA/300");}
        else if(w76 & 0x0002){tm = TRANSFER_MODE_SATA_150; current = max = _T("SATA/150");}

        return tm;
}

作者: 七仙花    时间: 2009-9-19 23:08
刚装了windows 7 pro 版,发现跟xp有很大的区别

这是在windows 7 pro 里注册表的值

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\msahci]
"Start"=dword:00000003
"Type"=dword:00000001
"ErrorControl"=dword:00000003
"Group"="SCSI Miniport"
"DriverPackageId"="mshdc.inf_x86_neutral_f64b9c35a3a5be81"


[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\atapi]
"Start"=dword:00000000
"Type"=dword:00000001
"ErrorControl"=dword:00000003
"DisplayName"="IDE 通道"
"Group"="SCSI Miniport"
"DriverPackageId"="mshdc.inf_x86_neutral_f64b9c35a3a5be81"
"Tag"=dword:00000021

在xp里是没有[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\msahci]
这个项的。
作者: victor888    时间: 2009-9-20 08:06
此贴可以锁了,看来这个start值不可以用来驱动真假SATA硬盘。
作者: ISO    时间: 2009-9-20 11:56
奇怪了,我的是纯SATA硬盘,在开启了AHCI情况下,而且是xp系统,刚才查了,居然没有这个键值
作者: lianjiang    时间: 2009-9-20 12:18
尚需进一步研究。



作者: adslceo    时间: 2009-9-20 13:29
我是win 7的系统,已经开启AHCI。HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci下面的start值为0.硬盘为希捷如图。

硬盘.JPG (19.33 KB, 下载次数: 83)

硬盘.JPG

作者: netwinxp    时间: 2009-9-21 14:22
Start的值只是表示该服务(或驱动)的启动状态,和是不是SATA一点关系也没有。
0:引导启动
1:系统启动
2:自动启动
3:手动启动
4:禁止启动

至于LZ举的那段代码,数据来自硬盘状态字节,那个当然可以判断出是否PATA(连DMA模式都可判断),是否支持HPA等。不过很可惜的是那些数据要和硬盘“沟通”它才会传给你。
作者: victor888    时间: 2009-9-21 18:53
感谢netwinxp,在硬盘研究方面,你是专家。
那段代码,我也看出了是和硬盘询问后才得出的答案,现在可惜的是如果不这么用,就只能从硬盘的序列号是去判断了,这样的操作虽然不算太麻烦但也烦人。

我再继续考虑一下...




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