2010-04-11 26 views
1

我寫了一個磁盤工具,允許您擦除整個物理驅動器。它使用Windows文件API,美其名曰:在win 7中無法寫入物理驅動器?

destFile = CreateFile("\\\\.\\PhysicalDrive1", 
    GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 
    NULL, OPEN_EXISTING,createflags, NULL); 

,然後只是打電話WriteFile,並確保你在行業的倍數寫,即512個字節。

在過去,XP和Win7 RC上都能正常工作,所有你需要做的就是確保你以管理員身份運行它。

但現在我零售Win7專業,它不再工作了!驅動器仍然可以正常打開,但在成功打開的驅動器上調用WriteFile現在失敗!

有沒有人知道這可能是爲什麼?它可能與打開共享標誌有關嗎?這總是我以前做過的,並且它的工作。現在是否可以共享驅動器?阻止寫入?有沒有辦法正確地「卸載」一個驅動器,或者至少是其上的分區,以便我可以獨佔訪問它?

曾經工作過的其他一些工具也不再有,但有些工具就像WD Diagnostic的擦除功能一樣。並且在擦除驅動器之後,我的工具也可以使用它!讓我相信我需要首先對驅動器進行一些「卸載」過程,以釋放寫入驅動器的權限。

任何想法?

更新:從WriteFile返回

錯誤代碼爲「5」,ERROR_ACCESS_DENIED 但同樣,如果我「刪除」先使用WD Diag(診斷)的驅動器,然後我就可以訪問和寫入到驅動器的罰款。當我再次初始化驅動器,並給它一個分區時,我回去得到ERROR_ACCESS_DENIED錯誤。

+0

請通知錯誤代碼或錯誤消息。 – jweyrich 2010-04-11 08:06:15

+0

@jweyrich:錯誤是:ERROR_ACCESS_DENIED – matt 2010-04-11 08:19:14

+0

我的建議是檢查UAC是否有這樣的東西。嘗試禁用它並重新運行你的應用程序。評論結果。 – jweyrich 2010-04-11 08:40:42

回答

1

這幾乎肯定與通過更改頁面文件中的扇區來防止針對驅動程序簽名發現的攻擊有關。它會阻止寫入包含分區的磁盤區域。

請參閱http://msdn.microsoft.com/en-us/library/aa365747%28VS.85%29.aspx並查看以「如果直接寫入具有已裝入文件系統的卷」文本開頭的信息,基本上必須鎖定磁盤的卷才能寫入其扇區。

+0

這看起來很有希望,我假設你不能在物理驅動器上調用FSCTL_DISMOUNT_VOLUME,並且必須枚舉驅動器上的分區並在所有驅動器上調用FSCTL_DISMOUNT_VOLUME。我不知道如何獲得物理驅動器上的分區,但我會考慮明天嘗試一下,謝謝。 – matt 2010-04-11 13:28:06

+0

您可以始終使用FindFirstVolume/FindNextVolume枚舉系統上的所有卷,並在每個捲上調用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,然後檢查該卷是否有相關磁盤上的任何後備存儲。 (有一些更復雜的情況,卷可以分佈在多個磁盤上等) – reuben 2010-04-11 20:13:30