2008-09-02 25 views
7

Tôi cần sửa đổi MBR của Windows và tôi thực sự muốn thực hiện điều này từ Windows.Sửa đổi MBR của Windows

Đây là câu hỏi của tôi. Tôi biết rằng tôi có thể có được một xử lý trên một thiết bị vật lý với một cuộc gọi đến CreateFile. MBR sẽ luôn ở trên \\. \ PHYSICALDRIVE0? Ngoài ra, tôi vẫn đang học Windows API để đọc trực tiếp từ đĩa. Là readabsolutesectors và writeabsolutesectdors hai chức năng tôi sẽ cần phải sử dụng để đọc/ghi vào các lĩnh vực đĩa có chứa MBR?

Chỉnh sửa từ những gì tôi đã học một mình. MBR sẽ không luôn ở trên \\. \ PHYSICALDRIVE0. Ngoài ra, bạn có thể viết thư cho trình khởi động (ít nhất là Quản trị viên trên XP) bằng cách gọi hàm CreateFile với tên thiết bị của ổ đĩa chứa MBR. Ngoài ra, bạn có thể ghi vào ổ đĩa này bằng cách đơn giản gọi WriteFile và truyền tay cầm của thiết bị được tạo ra bằng cách gọi CreateFile.

Chỉnh sửa địa chỉ Joel Coehoorn. Tôi cần chỉnh sửa MBR vì tôi đang làm việc trên một dự án cần sửa đổi sổ đăng ký phần cứng sau POST trong BIOS, nhưng trước khi Windows được phép khởi động. Kế hoạch của chúng tôi là thực hiện những thay đổi này bằng cách sửa đổi bộ nạp khởi động để thực thi mã của chúng tôi trước khi Windows khởi động.

Chỉnh sửa cho Cd-MaN. Cảm ơn thông tin. Tuy nhiên, không có gì trong câu trả lời của bạn, rằng tôi không biết và câu trả lời của bạn không giải quyết được câu hỏi của tôi. Việc đăng ký đặc biệt hoàn toàn sẽ không làm những gì chúng ta cần vì nhiều lý do. Lý do chính là Windows là lớp cao nhất trong số nhiều lớp phần mềm sẽ chạy với sản phẩm của chúng tôi. Những thay đổi này cần phải xảy ra ngay cả trước khi các mức thấp hơn chạy, và vì vậy đăng ký sẽ không hoạt động.

P.S. cho Cd-MaN. Như tôi đã hiểu, thông tin bạn cung cấp không chính xác. Đối với Vista, tôi nghĩ bạn có thể ghi vào một ổ đĩa nếu các sector được viết thành các sector khởi động. Xem http://support.microsoft.com/kb/942448

Trả lời

4

Sửa đổi bộ nạp khởi động là ý tưởng tồi, không tốt. Đây chỉ là một vài trong số các nhân Gotcha thể:

  • nó sẽ có khả năng tiêu diệt các sản phẩm mã hóa đĩa đầy đủ (Truecrypt, PGP, Vista BitLocker, vv)
  • nó sẽ có khả năng đi lên sản phẩm AV (người dùng sợ)
  • nó sẽ có khả năng tiêu diệt các kịch bản khởi động phức tạp (bộ tải khởi động xích, vv)
  • nó sẽ giết chết ra khỏi chuỗi sự tin tưởng khi sử dụng các module TPM (vì nó sẽ kiểm tra MBR cho sự thay đổi trước khi thực hiện nó)
  • truy cập đĩa trực tiếp là không được phép khởi động từ Vista (chỉ sử dụng trình điều khiển)

Alternatives (như sửa đổi sổ đăng ký phần cứng trong thời gian khởi động hệ thống Windows thông qua một trình điều khiển được thiết lập để tải vào lúc khởi động hoặc sau khi Windows đã khởi động) thực sự cần được xem xét. Nếu việc sửa đổi cũng đơn giản như bằng văn bản cho một cổng, ví dụ:

trình điều khiển
OUT AX, BL 

sau đó tồn tại cho tất cả các phiên bản của Window mà có thể làm được điều này (đọc/ghi một giá trị từ/tới một cổng nhất định) mà có thể được gọi là từ chế độ người dùng.

+0

Mỗi lập trình viên mã khởi động phải biết danh sách các vấn đề có thể xảy ra. Cảm ơn! –

+1

và bạn có thể nói những gotchas này được áp dụng để giành được 'fdisk/mbr' của 9x, và' fixmbr' của xp Rất ít có mã hóa toàn bộ đĩa .. Vượt qua AV thậm chí không phải là mối quan tâm nếu MBR bị hỏng hoặc không. Hầu hết mọi người không có kịch bản khởi động phức tạp và nếu họ đã làm tôi chắc chắn nếu họ cần thiết để sửa chữa MBR của họ sau đó fdisk/mbr hoặc fixmbr sẽ không gây ra tàn phá hơn họ có .. – barlop

5

Khi hệ điều hành được khởi động, MBR thường được bảo vệ vì lý do vi-rút - đây là một trong những thủ thuật vi-rút cũ nhất trong sách - quay lại truyền vi-rút từ đĩa mềm sang đĩa mềm.

Thậm chí nếu nó không bị hạn chế, bạn phải viết mã cấp thấp - nó không phải là một phần của hệ thống tệp, nhưng tồn tại trên một vị trí cụ thể trên ổ cứng.

Do đó, bạn bị hạn chế viết mức thấp (hầu hết các chương trình thực hiện việc này trong assembly) hoặc mã C nhắm mục tiêu 16 bit DOS.

Hầu hết các chương trình này sử dụng số BIOS interface (13h, tôi tin) để truy cập trực tiếp vào các phần của đĩa. Bạn có thể truy cập chúng trong C bằng cách sử dụng một số lắp ráp nội tuyến, hoặc trình biên dịch cung cấp giao diện. Nói chung, bạn sẽ không nhận được quyền truy cập vào BIOS mà không có sự hợp tác của hệ điều hành, vì vậy, chương trình của bạn, một lần nữa, sẽ bị hạn chế đối với DOS. Nếu bạn có thể truy cập những thứ này gần như không có nhà - điều tốt đẹp về BIOS là bạn không phải lo lắng về loại HD trong hệ thống - ngay cả thẻ RAID thường tự chèn vào các thói quen BIOS để chúng có thể truy cập được mà không biết bộ nhớ ATA hoặc bộ điều khiển SATA ở đâu, và thực thi các lệnh trên mức thấp đó.

Nếu bạn hoàn toàn phải truy cập trong hệ điều hành, bạn phải viết trình điều khiển thiết bị để truy cập BIOS hoặc không gian bộ nhớ nơi bộ điều khiển HD tồn tại. Mặc dù vậy, tôi không khuyên bạn nên sử dụng các máy tính hiện đại để đặt các bộ điều khiển HD ở các điểm khác nhau trong bộ nhớ, với các IRQ khác nhau và mỗi chipset trở nên bí truyền hơn một chút vì chúng có thể cung cấp một giao diện tối thiểu để bios khởi động, và sau đó là một trình điều khiển cụ thể cho Windows. Họ bỏ qua tất cả các giao diện niceties khác mà sẽ được coi là tương thích với các bộ điều khiển khác vì nó đắt hơn để tương thích.

Bạn có thể thấy rằng tại các cửa sổ bên trong mức độ lái xe, bạn sẽ có những phương pháp để truy cập vào các lĩnh vực ổ đĩa trực tiếp (hoặc giả trực tiếp), nhưng một lần nữa, họ có thể rất tốt bảo vệ do các vấn đề vi rút nói trên.

Chúc may mắn!

2

Có thể kịch bản khởi động PXE có thể giúp bạn? Chỉ cần khởi động trên ảnh PXE được tạo thủ công của bạn để sửa đổi các thanh ghi phần cứng mà bạn cần sửa đổi, và sau đó trả về điều khiển cho Bản ghi khởi động chính hoặc bản ghi khởi động của phân vùng hoạt động.

Bằng cách này bạn không phải sửa đổi bản ghi khởi động.

Các vấn đề liên quan