找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4370|回复: 0
打印 上一主题 下一主题
收起左侧

Windows 系统中的卷,逻辑驱动器和物理驱动器

[复制链接]
跳转到指定楼层
楼主
ID:90014 发表于 2015-9-13 16:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   这几天一直为如何判断插入系统中的U盘的盘符判断而头疼。经过前面几天的资料查阅,可以得知,在系统中插入新的设备时,总线驱动会通知即插即用管理器,在系统中给客户应用层发送WM_DEVICECHANGE的消息。此时用户程序可以捕捉该信息并进行处理。
实际使用时发现,当一个插入系统的U盘具有多个逻辑分区时,插入的设备安装消息会多次通知,可以得知真正增加了几个逻辑驱动器。但是,当U盘从系统中直接拔出时,只能获得一次设备变更的消息,至于是这几个逻辑驱动器中的哪一个,尚不可确知。此时只有对系统中的所有逻辑驱动器进行分析,才能正确地获得磁盘的变更情况更新。否则就会访问系统中已经不存在的磁盘,从而导致系统出错。
这个问题需要从Windows系统对磁盘的组织方式来理解。我们平时看到的大容量存储设备,包括硬盘,光驱,U盘,以及读卡器等等。在接入系统(设备安装)时,系统按照其接口类型进行分类,如SCSI,IDE(ATA),SATA,或采用USB转接的方式接入。而在存储功能上,CDROM被当作另外的一个设备类型处理。这些设备安装好之后,在系统看到是一个个的逻辑文件卷,每个逻辑文件卷对应有一个DOS设备名。这里是最容易混淆的地方:
1. 由于Windows系统用卷的方式组织文件。一个逻辑卷可能是一个物理磁盘分区,也可能是多个分区甚至多个磁盘阵列的组合,他们之间可以是唯一性使用(一般使用模式),也可能是聚合使用(多个磁盘组成的冗余,镜像阵列)。换句话说,一个物理磁盘,上面可能有多个物理分区,每个物理分区上可以划分为多个逻辑卷,也可能是多个物理分区组合成一个逻辑卷。
2. 不一定每个逻辑卷都是DOS设备名。对于没有DOS设备名的逻辑文件卷,如果不挂接在系统逻辑卷下面作为分支,则无法直接在资源管理器中看到。一般的用户操作也无法直接操作。
3. 如果将一个物理磁盘分区作为一个逻辑卷挂接在其他分区的文件夹以下,访问该分区的作业和访问文件夹的作业时完全相同。从用户角度并不能区分这个文件夹的具体位置在哪一个物理磁盘的哪一个物理分区上。
综上所述,Windows文件系统中,物理磁盘,物理分区,驱动器,文件卷之间的关系并不像DOS下那样简单。文件卷时系统提供的文件访问途经,一般都会有一个DOS设备名称,如C:,D:,知道Z,就是我们平时所熟悉的C盘,D盘等。但是这些DOS设备名真正对应的物理驱动器,可能是分布在多个物理磁盘组成的阵列中,也可能是同一磁盘的不同物理分区中。要从一个文件的路径中找到文件的真正物理位置,从而直接绕过操作系统进行访问,真的不容易,很多时候是不可能的事情。
下面说说另外的情形:对于采用USB接口的设备,如我们常见的U盘和读卡器,虽然只有一个物理接口,在Windows系统中,可能是多个设备,如在系统中形成多个物理磁盘驱动器,甚至是不同类型的设备,如一个U盘可以被仿真为一个ZIP盘,CDROM进行系统启动,这样进入系统后,在系统中就会看到增加了几个不同类型物理驱动器,分别归属于不同的设备分类中。对于多功能读卡器系列,则会看到有多个可移动磁盘出现在驱动器列表中。在没有插入卡介质时,对其访问都会出错,导致“请插入磁盘”的提示信息出现。
回到如何判断系统中都有哪些设备的问题上来。采用Windows 2000以后系统中所提供的Windows Management Interfaces(WMI)系统组件,可以获取当前系统中的所有设备信息,包括以上说提到的物理驱动器,物理驱动器的分区,逻辑驱动器(文件卷)等详细信息,在WMI的路径root\cimv2的Win32服务子集中,包括Win32_DiskDrive - 物理磁盘,Win32_DiskDrivePhysicalMedia,Win32_DiskDriveToDiskPartition,Win32_DiskPartition,Win32_DiskQuota等物理磁盘信息以及Win32_LogicalDisk,Win32_LogicalRootDirectory,Win32_LogicalDiskToPartition等,还有一个就是Win32_PhysicalMedia。这些不同的信息集合必须区分使用,中间的映射关系没有直接的定义。要查找这些关系,必须通过另外的内核级API访问来获取。一般常用到的是从Dos设备名取得物理路径名QueryDosDevice()来进行查表方式的比对。
对于可拆卸介质的大容量存储设备,如CDROM,读卡器类型,可以通过判断内置介质的容量方式来检查是否有介质插入。这个可以访问Win32_LogicalDisk的size属性,如果Size=0,则没有介质插入。否则返回的是该驱动介质的容量。不过这个对于可刻录型光驱媒体是不对的。需要使用另外的方式检查。
需要提及一点,对于磁盘分区的概念,目前只是用在硬盘驱动器中,对于其他存储类型,则会更多的划分为不同的磁盘驱动器,没有分区的概念。                                                                                                                    
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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