2016-11-22 142 views
3

我正在開發一個項目,以異步方式實時複製從一個硬盤到另一個硬盤的寫入請求。Windows硬盤驅動器實時複製

我是在windows下的內核模式驅動程序開發的新手,我腦子裏想監視IO請求。

我搜索了很多,但這個區域沒有記錄,因爲它應該。

我做搜索,發現4根引線(但其中非是一定要下手的最佳選擇)

  • IRP

通過Windows驅動程序使用的IO請求報文通信在他們和操作系統之間,但是我能夠監控硬盤驅動器使用的IRP嗎?那安全怎麼樣?

  • 的Windows過濾驅動

有很多從上系統過濾驅動程序級別降低,哪一個應該使用的?我能否過濾硬盤驅動器使用的IO?

  • IO鉤

這個技術被用於通過窗口防病毒到鉤的IO,並檢查文件。在我的情況下使用可靠嗎?

  • 內核事件跟蹤

微軟Diskmon工具用於監視硬盤活動。

這裏的問題是,我不知道從哪裏開始,以及從性能和安全角度入手的最佳選擇是什麼。

+1

你的安全擔憂是什麼?任何其他的內核模式代碼都可以做任何你喜歡的事情;沒有用戶模式代碼將能夠觸摸你。 –

+0

我的意思是關於其他驅動程序的安全問題,我能監控硬盤驅動程序使用的IO請求嗎? –

+1

稱爲RAID1。沒有人能夠*可靠地*競爭性地針對[19美元解決方案]進行計劃(http://www.newegg.com/Product/Product.aspx?Item=N82E16815124152)。 –

回答

1

你首先必須完善了解windows Storage, Volumes, and File System Stacks和使用Device Tree

確定的需要過濾器裝置,並作爲UpperFilter或Lowfilter。你真的需要複製磁盤,或者說磁盤上的分區(卷)或文件系統的讀/寫?在UpperFiltersHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}下或LowerFilters

閱讀this存儲堆棧例如 你的地方是在(4)(LowFilter - -

用於連接到設備,您可以註冊在註冊表中的自己,說磁盤過濾器,你將過濾器IRP_MJ_SCSI讀/寫)或(7)(UpperFilter - 你會過濾IRP_MJ_READ/IRP_MJ_WRITE進行讀/寫) 驅動程序必須是直接或WDM(寄存器驅動AddDevice),或使用KMDF(殼框架)

另一種解決方案使用IoRegisterPlugPlayNotificationEventCategoryDeviceInterfaceChange,& GUID_DEVINTERFACE_DISK)用於連接磁盤FDO - 在這裏你將永遠是UpperFilter

並問這種問題,建議最好的資源 - 是osronline - NTFSD或NTDEV論壇

+0

感謝您引用它們看起來非常有幫助的,關於你的問題,我需要複製整個磁盤的塊級 –

+0

@AhmedKato - 所以你需要 - https://msdn.microsoft.com/en-us/windows/硬件/驅動程序/存儲/存儲過濾器驅動程序。和確定的低的或高的過濾器 - '較低級SFD監視由存儲類driver'發出的SRB和/或的IRP,更高級別的存儲過濾器驅動器(SFD)從用戶的應用程序截取的IRP – RbMm

相關問題