> ДОС любимый ДОС да плюс Асмак... > МММММ...... У меня есть прога на асмаке она читает МБР , > убивает МБР, убивает КМОС.....ТЕМА!!! Ни дос ни асмак не обязателен. Если конечно не тянет на извращения. У меня есть прога под вынь на С которая делает то же самое.
Если же извращений (в том числе и выньдосных) совершенно не хочется, то лучше линух (или что нить другое юнихоподобное) и
dd if=/dev/hda of=/tmp/mbr bs=512 count=1
---
Спасет отца русской демократии.
А ДОС+асм это один из самых геморройных вариантов.
> > Я имел ввиду прочитать MBR программно (прога > Win32).... > Открываешь девайс \device\harddisk0\partition0 и читаешь > оттуда 512 байт если прав хватит
Не удается открыть этот девайс... Работаю под админом... Киньте пример плиз...
[NT] Читайте MSDN и будет вам счастье01.08.03 17:43 Автор: amirul <Serge> Статус: The Elderman
> > > Я имел ввиду прочитать MBR программно (прога > > Win32).... > > Открываешь девайс \device\harddisk0\partition0 и > читаешь > > оттуда 512 байт если прав хватит > Не удается открыть этот девайс... Работаю под админом... > Киньте пример плиз... На самом деле открыть любой девайс из директории объектов \device\ можно только из драйвера. Из Win32 приложения открываются только записи в директории \DosDevices\ (является ссылкой на \GLOBAL??\ в XP и на \??\ в 2000). Но сам \Device\Harddisk0\Partition0 является ссылкой на \Device\Harddisk0\DR0, в свою очередь \GLOBAL??\PhysicalDrive0 тоже является ссылкой на \Device\Harddisk0\DR0. Что в свою очередь дает нам право открывать ее.
> Вот только открывать надо \\.\PhysicalDrive0, а не > \\\\.\\PhysicalDrive0 :) Общеизвестно, что символ "\" используется в C для эскейпирования, то бишь для введения таких специальных символов, которые нельзя набрать на клавиатуре как CR, LF в C это выглядит как '\r', '\n' соотвественно. Таким образом для получения символа \ нужно эскейпировать его самого. То есть
printf("\\");
выведет:
\
Успехов :-)
ЗЫ: К слову, приведенная программа была скопирована прямиком из окна Visual C++, после того как была оттестирована.
[NT] Было уже23.07.03 12:51 Автор: Sandy <Alexander Stepanov> Статус: Elderman
> > Я имел ввиду прочитать MBR программно (прога > Win32).... > Открываешь девайс \device\harddisk0\partition0 и читаешь > оттуда 512 байт если прав хватит
А, может, так: \device\harddisk0\partition1 ???
[NT] Не-е-е. :-) Partition1 - первый раздел на диске23.07.03 14:09 Автор: amirul <Serge> Статус: The Elderman
> > > Я имел ввиду прочитать MBR программно (прога > > Win32).... > > Открываешь девайс \device\harddisk0\partition0 и > читаешь > > оттуда 512 байт если прав хватит > > А, может, так: \device\harddisk0\partition1 ??? И первые 512 байт с него это бут сектор этого раздела. А partition0 - физический (raw) диск и начинается он с MBR-а
Вопрос в догонку24.07.03 08:41 Автор: Kerk Статус: Незарегистрированный пользователь
> Как узнать количество физических винтов? В частности функции SetupDiGetClassDevs с классом {4D36E967-E325-11CE-BFC1-08002BE10318} в качестве первого параметра (только не забыть флаг DIGCF_PRESENT, а то возвратит все девайсы, которые когда либо были, в том числе и уже удаленные). Ну а дальше... Ну например функцией SetupDiEnumDeviceInfo перечислить девайсы и посчитать сколько получится.
Хотя можно и менее правильно, например посчитать количество каталогов с маской \device\harddisk* или прочитать в реестре ключ для вышеупомянутого класса