利用windows核心驅動建立虛擬磁碟裝置

來源:互聯網
上載者:User

最近看了一下一個叫做filedisk的開來源程式的代碼 瞭解了關於磁碟裝置驅動的一些東西

總結一下

filedisk的功能就是可以把磁碟上的某個檔案對應成一個磁碟機

像一般的磁碟卷一樣來使用

關於filedisk的原理簡單來說就是利用驅動程式建立一個磁碟裝置(IoCreateDevice)

然後在使用者態程式中用DefineDosDevice將這個裝置掛載到某個盤符下面

也就是把所有到這個盤符的操作都導向使用核心驅動建立的這個虛擬磁碟裝置

在核心驅動裡面就處理所有的IRP_MJ_WRITE和IRP_MJ_READ請求就可以了

至於怎麼樣來處理這兩個讀寫請求就可以衍生出很多東西

比如在進行讀寫處理時對資料進行加密的話 就變成了一個透明加密的東西

比如TrueCrypt好像就是這麼做的

如果把寫操作複製幾份分別發到其他裝置 那麼就變成了 鏡像

filedisk裡面是把讀寫操作完全的導向某個磁碟檔案 這樣一來就是把檔案虛擬成磁碟了

其實這個辦法以前也做過 但是總是不行 看了filedisk的源碼以後才知道 除了處理讀寫操作之外

還需要處理很多DeviceIoControl的請求

作為一個磁碟驅動在filedisk裡面處理了以下的一些請求

直接返回STATUS_INVALID_DEVICE_REQUEST的IO請求有

IOCTL_DISK_CHECK_VERIFY

IOCTL_CDROM_CHECK_VERIFY

IOCTL_STORAGE_CHECK_VERIFY

IOCTL_STORAGE_CHECK_VERIFY2

IOCTL_DISK_MEDIA_REMOVAL

IOCTL_STORAGE_MEDIA_REMOVAL

IOCTL_CDROM_READ_TOC

IOCTL_DISK_SET_PARTITION_INFO

需要專門進行處理的IO請求

IOCTL_DISK_GET_DRIVE_GEOMETRY

IOCTL_DISK_GET_LENGTH_INFO

IOCTL_DISK_GET_PARTITION_INFO

IOCTL_DISK_VERIFY

IOCTL_DISK_GET_PARTITION_INFO_EX

IOCTL_DISK_IS_WRITABLE

對需需要進行處理的IO請求 按照ddk的文檔說明來處理就是

比如IOCTL_DISK_GET_DRIVE_GEOMETRY就是獲得該物理裝置的一些資訊

IOCTL_DISK_GET_PARTITION_INFO是獲得該磁碟上的分區表資訊等

以前做的時候就是沒有處理這些 導致失敗...囧

雖然現在看了filedisk 才知道需要處理這些請求

但是還是不知道 哪裡有資料講磁碟驅動 卷驅動需要處理哪些特定的IO控制請求

以上 就是filedisk的內容 做了這些 基本就能寫出一個 完整的虛擬磁碟裝置了

還有需要注意的地方就是在處理讀寫請求時 需要建立一個系統線程

分發常式中接收到的讀寫Irp包都插入一個隊列中 在建立的系統線程中來處理

這應該是 一種標準的做法 用來避免在分發常式中由於等待而死結的問題

嗯 然後下來就是準備嘗試把這個和過濾驅動結合起來了...

嗯 又可以由此衍生出很多應用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.