2010-04-24 175 views
3

我想知道磁盤訪問是如何工作的。例如,我如何查看/修改行業?如果有幫助,我針對Windows。 感謝直接訪問硬盤?

回答

5

This page似乎對這個問題的一些相關信息:

您可以打開物理或邏輯 驅動器使用CreateFile() 應用程序編程接口 (API)與這些設備名稱提供 您有適當的權限 權利到驅動器(也就是說,您必須是管理員 )。您必須使用 CreateFile()FILE_SHARE_READ 和FILE_SHARE_WRITE標誌來獲得對驅動器的訪問 。

一旦打開了邏輯或物理驅動器 ,就可以對整個驅動器上的數據執行 直接I/O。執行直接磁盤 I/O時,您必須在 設備的扇區大小的多個扇區邊界和 中尋找,讀取和寫入。呼叫使用 IOCTL_DISK_GET_DRIVE_GEOMETRY得到 每個磁道的每扇區字節, 扇區數,扇區 DeviceIoControl的()等 來回,這樣就可以計算 大小,你將需要的緩衝區。

documentation of CreateFile還提供了一些線索:

您可以使用CreateFile函數打開一個物理磁盤驅動器或卷, 它返回一個直接訪問存儲設備(DASD)處理,可以是與DeviceIoControl函數一起使用的 。這使您可以直接訪問 磁盤或卷,例如磁盤元數據如分區 表。但是,此類訪問還會將磁盤驅動器或磁盤暴露給潛在的數據丟失,因爲使用此機制對磁盤進行不正確寫入可能會使其內容無法訪問到 操作系統。爲了確保數據的完整性,請務必熟悉DeviceIoControl以及其他API如何以 的行爲與直接訪問句柄不同,而不是使用文件系統句柄。

0

STXXL可能是你的興趣:使用Win32的的CreateFile()函數(如驅動器C)或物理驅動器 http://stxxl.sourceforge.net/

+3

它是如何相關的? – 2010-04-24 06:14:49

1

您可以打開一個邏輯卷。使用返回的句柄,您可以根據需要讀取和寫入扇區。 該頁面在MSDN應該讓你開始:CreateFile Function

我不承擔責任的損壞引起的:-)

+0

我得到了@user想要​​直接*訪問驅動器的印象。 – 2010-04-24 03:44:19

+0

@John:你的意思是說他可能想完全繞過Windows? 打開物理驅動器時,您可以直接訪問它的內容......它不是焊接你自己的SATA控制器,但它比人們通常使用的級別要低:-) 我很確定Windows驅動程序開發工具包有磁盤驅動程序的樣本(如果有幫助的話)。 – 2010-04-24 12:28:06