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