2008-09-02 41 views
7

我需要修改Windows的MBR,我真的很想從Windows執行此操作。修改Windows的MBR

這是我的問題。我知道我可以通過調用CreateFile來處理物理設備。 MBR總是在\\。PHYSICALDRIVE0?另外,我還在學習Windows API以直接從磁盤讀取。 readabsolutesectors和writeabsolutesectdors是我需要用來讀/寫包含MBR的磁盤扇區的兩個函數嗎?

從我自己學到的東西中編輯。 MBR不會總是在\\。\ PHYSICALDRIVE0上。另外,可以通過調用CreateFile和包含MBR的驅動器的設備名稱來寫入引導扇區(至少以XP管理員身份)。另外,只需調用WriteFile並傳遞通過調用CreateFile創建的設備的句柄即可寫入該驅動器。

編輯地址Joel Coehoorn。 我需要編輯MBR,因爲我正在開發一個項目,需要在BIOS中POST後修改硬件寄存器,但在Windows允許啓動之前。我們的計劃是通過修改引導加載程序在Windows引導之前執行我們的代碼來進行這些更改。

編輯Cd-MaN。 感謝您的信息。但是,答案中沒有任何內容,我不知道,你的回答也不能解決我的問題。由於多種原因,註冊管理機構絕對不會做我們需要的。最重要的原因是Windows是我們的產品中運行的多個軟件層中的最高層。這些更改需要在較低級別運行之前發生,因此註冊表將無法工作。

P.S.爲Cd-MaN。根據我的理解,您提供的信息不完全正確。對於Vista,如果正在寫入的扇區是引導扇區,我認爲您可以寫入卷。請參閱http://support.microsoft.com/kb/942448

回答

4

修改引導加載程序是不好的,壞主意。這裏僅僅是幾個可能的疑難雜症的的:

  • 這將有可能殺死全磁盤加密產品(TrueCrypt的,PGP,Vista中的BitLocker等)
  • 這將有可能絆倒AV產品(嚇唬用戶)
  • 它將可能殺死複雜引導場景(鏈式引導裝載程序,等等)
  • 使用TPM模塊時,它能夠殺死信任鏈(因爲它在執行前檢查MBR變更)
  • 直接磁盤訪問是不允許從Vista開始(僅限使用驅動程序)

替代品(如在啓動時通過設置爲在啓動時加載的驅動程序或Windows啓動後加載的Windows啓動過程中修改硬件寄存器)應該被認真考慮。如果修改是爲寫一個端口,即簡單:

OUT AX, BL 

然後驅動程序存在窗口的所有版本,它可以這樣做(讀/寫從/ a的值爲某個端口),它可以被稱爲來自用戶模式。

+0

每個啓動程序代碼程序員都應該知道可能的問題列表。謝謝! – 2013-04-06 08:26:28

5

操作系統啓動後,MBR通常受到病毒保護 - 這是書中最古老的病毒技巧之一 - 可以追溯到將病毒從軟盤傳遞到軟盤。

即使沒有限制,您也必須編寫低級代碼 - 它不是文件系統的一部分,但存在於硬盤上的特定位置。由於這個原因,你幾乎只能編寫低級別的程序(大多數程序在彙編中實現這一點),或者只能編寫16位DOS的C代碼。

大多數這些程序都使用BIOS interface(我相信13h)直接訪問磁盤的扇區。您可以使用一些內聯彙編或編譯器提供的接口在C中訪問它們。但是,如果沒有操作系統的配合,您通常無法訪問BIOS,因此您的程序將再次受限於DOS。如果你可以訪問它們,你幾乎可以免費進入家中 - 關於BIOS的好處是你不必擔心繫統中的HD是什麼類型 - 即使RAID卡經常插入BIOS例程中,以便訪問它們而不知道ATA或SATA控制器在內存中的位置,並在該低級別上執行命令。

如果您絕對必須在操作系統內訪問它,不過,您幾乎必須編寫設備驅動程序才能訪問BIOS或HD控制器所在的內存空間。不過,我不會推薦它,因爲這很難處理 - 現代計算機將HD控制器放在內存中的不同位置,使用不同的IRQ,每個芯片組都變得更加深奧,因爲它們可以提供最低限度的接口到bios啓動,然後是Windows的特定驅動程序。他們跳過所有其他接口細節,認爲兼容其他控制器,因爲兼容性更高。

您可能會發現,在Windows內部的驅動程序級別,您將有直接訪問驅動器扇區的方法(或直接僞),但是由於上述病毒問題,它們可能會得到很好的保護。

祝你好運!

2

也許PXE啓動方案可以幫助您?只需引導您製作的PXE映像,修改需要修改的硬件寄存器,然後將控制權歸還給主引導記錄或活動分區的引導記錄。

這樣你就不必修改引導記錄。