找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 5194|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Windows 系統(tǒng)中的卷,邏輯驅(qū)動(dòng)器和物理驅(qū)動(dòng)器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:90014 發(fā)表于 2015-9-13 16:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
   這幾天一直為如何判斷插入系統(tǒng)中的U盤的盤符判斷而頭疼。經(jīng)過(guò)前面幾天的資料查閱,可以得知,在系統(tǒng)中插入新的設(shè)備時(shí),總線驅(qū)動(dòng)會(huì)通知即插即用管理器,在系統(tǒng)中給客戶應(yīng)用層發(fā)送WM_DEVICECHANGE的消息。此時(shí)用戶程序可以捕捉該信息并進(jìn)行處理。
實(shí)際使用時(shí)發(fā)現(xiàn),當(dāng)一個(gè)插入系統(tǒng)的U盤具有多個(gè)邏輯分區(qū)時(shí),插入的設(shè)備安裝消息會(huì)多次通知,可以得知真正增加了幾個(gè)邏輯驅(qū)動(dòng)器。但是,當(dāng)U盤從系統(tǒng)中直接拔出時(shí),只能獲得一次設(shè)備變更的消息,至于是這幾個(gè)邏輯驅(qū)動(dòng)器中的哪一個(gè),尚不可確知。此時(shí)只有對(duì)系統(tǒng)中的所有邏輯驅(qū)動(dòng)器進(jìn)行分析,才能正確地獲得磁盤的變更情況更新。否則就會(huì)訪問(wèn)系統(tǒng)中已經(jīng)不存在的磁盤,從而導(dǎo)致系統(tǒng)出錯(cuò)。
這個(gè)問(wèn)題需要從Windows系統(tǒng)對(duì)磁盤的組織方式來(lái)理解。我們平時(shí)看到的大容量存儲(chǔ)設(shè)備,包括硬盤,光驅(qū),U盤,以及讀卡器等等。在接入系統(tǒng)(設(shè)備安裝)時(shí),系統(tǒng)按照其接口類型進(jìn)行分類,如SCSI,IDE(ATA),SATA,或采用USB轉(zhuǎn)接的方式接入。而在存儲(chǔ)功能上,CDROM被當(dāng)作另外的一個(gè)設(shè)備類型處理。這些設(shè)備安裝好之后,在系統(tǒng)看到是一個(gè)個(gè)的邏輯文件卷,每個(gè)邏輯文件卷對(duì)應(yīng)有一個(gè)DOS設(shè)備名。這里是最容易混淆的地方:
1. 由于Windows系統(tǒng)用卷的方式組織文件。一個(gè)邏輯卷可能是一個(gè)物理磁盤分區(qū),也可能是多個(gè)分區(qū)甚至多個(gè)磁盤陣列的組合,他們之間可以是唯一性使用(一般使用模式),也可能是聚合使用(多個(gè)磁盤組成的冗余,鏡像陣列)。換句話說(shuō),一個(gè)物理磁盤,上面可能有多個(gè)物理分區(qū),每個(gè)物理分區(qū)上可以劃分為多個(gè)邏輯卷,也可能是多個(gè)物理分區(qū)組合成一個(gè)邏輯卷。
2. 不一定每個(gè)邏輯卷都是DOS設(shè)備名。對(duì)于沒(méi)有DOS設(shè)備名的邏輯文件卷,如果不掛接在系統(tǒng)邏輯卷下面作為分支,則無(wú)法直接在資源管理器中看到。一般的用戶操作也無(wú)法直接操作。
3. 如果將一個(gè)物理磁盤分區(qū)作為一個(gè)邏輯卷掛接在其他分區(qū)的文件夾以下,訪問(wèn)該分區(qū)的作業(yè)和訪問(wèn)文件夾的作業(yè)時(shí)完全相同。從用戶角度并不能區(qū)分這個(gè)文件夾的具體位置在哪一個(gè)物理磁盤的哪一個(gè)物理分區(qū)上。
綜上所述,Windows文件系統(tǒng)中,物理磁盤,物理分區(qū),驅(qū)動(dòng)器,文件卷之間的關(guān)系并不像DOS下那樣簡(jiǎn)單。文件卷時(shí)系統(tǒng)提供的文件訪問(wèn)途經(jīng),一般都會(huì)有一個(gè)DOS設(shè)備名稱,如C:,D:,知道Z,就是我們平時(shí)所熟悉的C盤,D盤等。但是這些DOS設(shè)備名真正對(duì)應(yīng)的物理驅(qū)動(dòng)器,可能是分布在多個(gè)物理磁盤組成的陣列中,也可能是同一磁盤的不同物理分區(qū)中。要從一個(gè)文件的路徑中找到文件的真正物理位置,從而直接繞過(guò)操作系統(tǒng)進(jìn)行訪問(wèn),真的不容易,很多時(shí)候是不可能的事情。
下面說(shuō)說(shuō)另外的情形:對(duì)于采用USB接口的設(shè)備,如我們常見(jiàn)的U盤和讀卡器,雖然只有一個(gè)物理接口,在Windows系統(tǒng)中,可能是多個(gè)設(shè)備,如在系統(tǒng)中形成多個(gè)物理磁盤驅(qū)動(dòng)器,甚至是不同類型的設(shè)備,如一個(gè)U盤可以被仿真為一個(gè)ZIP盤,CDROM進(jìn)行系統(tǒng)啟動(dòng),這樣進(jìn)入系統(tǒng)后,在系統(tǒng)中就會(huì)看到增加了幾個(gè)不同類型物理驅(qū)動(dòng)器,分別歸屬于不同的設(shè)備分類中。對(duì)于多功能讀卡器系列,則會(huì)看到有多個(gè)可移動(dòng)磁盤出現(xiàn)在驅(qū)動(dòng)器列表中。在沒(méi)有插入卡介質(zhì)時(shí),對(duì)其訪問(wèn)都會(huì)出錯(cuò),導(dǎo)致“請(qǐng)插入磁盤”的提示信息出現(xiàn)。
回到如何判斷系統(tǒng)中都有哪些設(shè)備的問(wèn)題上來(lái)。采用Windows 2000以后系統(tǒng)中所提供的Windows Management Interfaces(WMI)系統(tǒng)組件,可以獲取當(dāng)前系統(tǒng)中的所有設(shè)備信息,包括以上說(shuō)提到的物理驅(qū)動(dòng)器,物理驅(qū)動(dòng)器的分區(qū),邏輯驅(qū)動(dòng)器(文件卷)等詳細(xì)信息,在WMI的路徑root\cimv2的Win32服務(wù)子集中,包括Win32_DiskDrive - 物理磁盤,Win32_DiskDrivePhysicalMedia,Win32_DiskDriveToDiskPartition,Win32_DiskPartition,Win32_DiskQuota等物理磁盤信息以及Win32_LogicalDisk,Win32_LogicalRootDirectory,Win32_LogicalDiskToPartition等,還有一個(gè)就是Win32_PhysicalMedia。這些不同的信息集合必須區(qū)分使用,中間的映射關(guān)系沒(méi)有直接的定義。要查找這些關(guān)系,必須通過(guò)另外的內(nèi)核級(jí)API訪問(wèn)來(lái)獲取。一般常用到的是從Dos設(shè)備名取得物理路徑名QueryDosDevice()來(lái)進(jìn)行查表方式的比對(duì)。
對(duì)于可拆卸介質(zhì)的大容量存儲(chǔ)設(shè)備,如CDROM,讀卡器類型,可以通過(guò)判斷內(nèi)置介質(zhì)的容量方式來(lái)檢查是否有介質(zhì)插入。這個(gè)可以訪問(wèn)Win32_LogicalDisk的size屬性,如果Size=0,則沒(méi)有介質(zhì)插入。否則返回的是該驅(qū)動(dòng)介質(zhì)的容量。不過(guò)這個(gè)對(duì)于可刻錄型光驅(qū)媒體是不對(duì)的。需要使用另外的方式檢查。
需要提及一點(diǎn),對(duì)于磁盤分區(qū)的概念,目前只是用在硬盤驅(qū)動(dòng)器中,對(duì)于其他存儲(chǔ)類型,則會(huì)更多的劃分為不同的磁盤驅(qū)動(dòng)器,沒(méi)有分區(qū)的概念。                                                                                                                    
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表