无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 8446|回复: 26
打印 上一主题 下一主题

为从注册表判断硬盘接口类型,请帮我看一下注册表这个位置

[复制链接]
跳转到指定楼层
1#
发表于 2009-9-19 12:08:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个贴子的主要目的是协助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 编辑 ]
2#
发表于 2009-9-19 12:18:27 | 只看该作者
谢谢你的努力。

这个问题,没有众人的参与是不行的。
回复

使用道具 举报

3#
 楼主| 发表于 2009-9-19 12:53:23 | 只看该作者
目前可以判断硬盘接口类型的软件我只知道everest,我估计它也可能是通过硬盘序号根据数据库得出的。直接编程获取,或用WIN自带的工具获取的方法我还是寻找中。
回复

使用道具 举报

4#
发表于 2009-9-19 12:57:02 | 只看该作者
我xp3的注册表中没有这个注册表项
回复

使用道具 举报

5#
 楼主| 发表于 2009-9-19 13:00:49 | 只看该作者
你的是什么类型的硬盘?
回复

使用道具 举报

6#
发表于 2009-9-19 13:16:22 | 只看该作者
是SATA接口,只有80G,不知道算不算SATA硬盘。
回复

使用道具 举报

7#
发表于 2009-9-19 13:16:49 | 只看该作者
原帖由 jxf268 于 2009-9-19 12:57 发表
我xp3的注册表中没有这个注册表项


我的XPSP3也没有 Msahci  这个项,我的是标准的IDE硬盘。
还有在XP的注册表中HKEY_LOCAL_MACHINE\System\CurrentControlSet1 项与 HKEY_LOCAL_MACHINE\System\CurrentControlSet 项是对应的,你把 \CurrentControlSet1 的内容删除或修改了,那么 \CurrentControlSet 的对应内容也会自动删除或修改。
回复

使用道具 举报

8#
 楼主| 发表于 2009-9-19 13:26:47 | 只看该作者
在别人的提醒下找一个软件,CRYSTALDISKINFO,带源码:http://crystalmark.info/?lang=en

===

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

[ 本帖最后由 victor888 于 2009-9-19 13:40 编辑 ]
回复

使用道具 举报

9#
 楼主| 发表于 2009-9-19 13:28:34 | 只看该作者

回复 #6 jxf268 的帖子

要么是IDE转接类型,要么是在BIOS里以兼容模式运行。GHOST是无法在纯SATA硬盘上运行的。
回复

使用道具 举报

10#
发表于 2009-9-19 14:00:27 | 只看该作者
在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 硬盘控制器"

不知对你是否有用。
回复

使用道具 举报

11#
 楼主| 发表于 2009-9-19 14:08:44 | 只看该作者
谢谢楼上,看来XP下和WIN7下相同的start值并不代表相同接口类型硬盘,XP下0代表IDE,WIN7下应该代表SATA。
回复

使用道具 举报

12#
 楼主| 发表于 2009-9-19 14:11:01 | 只看该作者
jxf268麻烦再看一下HKEY_LOCAL_MACHINE\System\ControlSet001\Services\Msahci项下的start值,谢谢。
回复

使用道具 举报

13#
发表于 2009-9-19 14:16:10 | 只看该作者
我的XP SP3下面也没有这个键值.
回复

使用道具 举报

14#
发表于 2009-9-19 14:25:33 | 只看该作者
原帖由 victor888 于 2009-9-19 14:11 发表
jxf268麻烦再看一下HKEY_LOCAL_MACHINE\System\ControlSet001\Services\Msahci项下的start值,谢谢。



楼主,你搞错了,在XP下是没有这个项的,请看我在7楼的回复。
回复

使用道具 举报

15#
发表于 2009-9-19 14:36:58 | 只看该作者

回复 #12 victor888 的帖子

XP下没有这个项,也许我那硬盘不是真正的SATA
回复

使用道具 举报

16#
发表于 2009-9-19 15:00:14 | 只看该作者
我的xp也没有斑竹说的键值。
回复

使用道具 举报

17#
发表于 2009-9-19 15:17:29 | 只看该作者
原帖由 victor888 于 2009-9-19 13:26 发表
在别人的提醒下找一个软件,CRYSTALDISKINFO,带源码:http://crystalmark.info/?lang=en

===

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


下载了,没找到有atasmart.cpp文件。
回复

使用道具 举报

18#
 楼主| 发表于 2009-9-19 16:22:19 | 只看该作者

回复 #17 lianjiang 的帖子

你需要下载源码,不是软件。
回复

使用道具 举报

19#
发表于 2009-9-19 17:04:41 | 只看该作者
原帖由 victor888 于 2009-9-19 16:22 发表
你需要下载源码,不是软件。


明白了。可惜对编程一无所知,不知道如何利用。
假如那个软件支持命令行的话,用起来就方便些了。
回复

使用道具 举报

20#
 楼主| 发表于 2009-9-19 19:25:30 | 只看该作者
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;
}
回复

使用道具 举报

21#
发表于 2009-9-19 23:08:03 | 只看该作者
刚装了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]
这个项的。
回复

使用道具 举报

22#
 楼主| 发表于 2009-9-20 08:06:50 | 只看该作者
此贴可以锁了,看来这个start值不可以用来驱动真假SATA硬盘。
回复

使用道具 举报

23#
发表于 2009-9-20 11:56:53 | 只看该作者
奇怪了,我的是纯SATA硬盘,在开启了AHCI情况下,而且是xp系统,刚才查了,居然没有这个键值
回复

使用道具 举报

24#
发表于 2009-9-20 12:18:52 | 只看该作者
尚需进一步研究。


回复

使用道具 举报

25#
发表于 2009-9-20 13:29:56 | 只看该作者
我是win 7的系统,已经开启AHCI。HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msahci下面的start值为0.硬盘为希捷如图。

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

硬盘.JPG
回复

使用道具 举报

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

至于LZ举的那段代码,数据来自硬盘状态字节,那个当然可以判断出是否PATA(连DMA模式都可判断),是否支持HPA等。不过很可惜的是那些数据要和硬盘“沟通”它才会传给你。
回复

使用道具 举报

27#
 楼主| 发表于 2009-9-21 18:53:29 | 只看该作者
感谢netwinxp,在硬盘研究方面,你是专家。
那段代码,我也看出了是和硬盘询问后才得出的答案,现在可惜的是如果不这么用,就只能从硬盘的序列号是去判断了,这样的操作虽然不算太麻烦但也烦人。

我再继续考虑一下...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-25 23:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表