Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | | | | |
Насколько я понимаю, самым правильным методом будет использование SetupAPI 24.07.03 12:35 Число просмотров: 1765
Автор: amirul <Serge> Статус: The Elderman
|
> Как узнать количество физических винтов? В частности функции SetupDiGetClassDevs с классом {4D36E967-E325-11CE-BFC1-08002BE10318} в качестве первого параметра (только не забыть флаг DIGCF_PRESENT, а то возвратит все девайсы, которые когда либо были, в том числе и уже удаленные). Ну а дальше... Ну например функцией SetupDiEnumDeviceInfo перечислить девайсы и посчитать сколько получится.
Хотя можно и менее правильно, например посчитать количество каталогов с маской \device\harddisk* или прочитать в реестре ключ для вышеупомянутого класса
|
<operating systems>
|
MBR 23.07.03 08:59 [Shturmfogell]
Автор: Kerk Статус: Незарегистрированный пользователь
|
Как прочитать MBR под WinNT(2000/XP)?
|
|
MBR 25.08.03 08:23
Автор: Dr.Zip Статус: Незарегистрированный пользователь
|
ДОС любимый ДОС да плюс Асмак...
МММММ...... У меня есть прога на асмаке она читает МБР , убивает МБР, убивает КМОС.....ТЕМА!!!
|
| |
Ветка то старая 25.08.03 14:38
Автор: amirul <Serge> Статус: The Elderman
|
> ДОС любимый ДОС да плюс Асмак... > МММММ...... У меня есть прога на асмаке она читает МБР , > убивает МБР, убивает КМОС.....ТЕМА!!! Ни дос ни асмак не обязателен. Если конечно не тянет на извращения. У меня есть прога под вынь на С которая делает то же самое.
Если же извращений (в том числе и выньдосных) совершенно не хочется, то лучше линух (или что нить другое юнихоподобное) и
dd if=/dev/hda of=/tmp/mbr bs=512 count=1
---
Спасет отца русской демократии.
А ДОС+асм это один из самых геморройных вариантов.
|
|
MBR 23.07.03 10:55
Автор: ZaDNiCa <indeed ZaDNiCa> Статус: Elderman
|
Любой тулзой редактирования дисков
к примеру тем же R-Studio (Recovery Studio)
|
| |
[NT] MBR 23.07.03 11:29
Автор: Kerk Статус: Незарегистрированный пользователь
|
Я имел ввиду прочитать MBR программно (прога Win32)....
|
| | |
[NT] Было уже 23.07.03 12:08
Автор: amirul <Serge> Статус: The Elderman
|
> Я имел ввиду прочитать MBR программно (прога Win32).... Открываешь девайс \device\harddisk0\partition0 и читаешь оттуда 512 байт если прав хватит
|
| | | |
[NT] Открыть девайс 01.08.03 17:03
Автор: Kerk Статус: Незарегистрированный пользователь
|
> > Я имел ввиду прочитать 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. Что в свою очередь дает нам право открывать ее.
Вот пример:
#include <windows.h>
int
main() {
HANDLE hFile;
char buf[512];
DWORD junk;
hFile = CreateFile("\\\\.\\PhysicalDrive0", MAXIMUM_ALLOWED, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
goto fail;
if (!ReadFile(hFile, buf, sizeof(buf), &junk, NULL))
goto fail;
CloseHandle(hFile);
hFile = CreateFile("mbr.bin", MAXIMUM_ALLOWED, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
goto fail;
if (!WriteFile(hFile, buf, sizeof(buf), &junk, NULL))
goto fail;
return 0;
fail:
if (hFile != INVALID_HANDLE_VALUE)
CloseHandle(hFile);
return -1;
}
---
Вот только в MSDN-овской статье по CreateFile написано как открывать физические диски.
|
| | | | | |
[NT] Читал MSDN и было мне счастье 11.08.03 10:17
Автор: Kerk Статус: Незарегистрированный пользователь
|
Вот только открывать надо \\.\PhysicalDrive0, а не \\\\.\\PhysicalDrive0 :)
|
| | | | | | |
[NT] Ну а это уже синтаксис C 11.08.03 13:45
Автор: amirul <Serge> Статус: The Elderman
|
> Вот только открывать надо \\.\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 Статус: Незарегистрированный пользователь
|
Как узнать количество физических винтов?
|
| | | | | | |
Насколько я понимаю, самым правильным методом будет использование SetupAPI 24.07.03 12:35
Автор: amirul <Serge> Статус: The Elderman
|
> Как узнать количество физических винтов? В частности функции SetupDiGetClassDevs с классом {4D36E967-E325-11CE-BFC1-08002BE10318} в качестве первого параметра (только не забыть флаг DIGCF_PRESENT, а то возвратит все девайсы, которые когда либо были, в том числе и уже удаленные). Ну а дальше... Ну например функцией SetupDiEnumDeviceInfo перечислить девайсы и посчитать сколько получится.
Хотя можно и менее правильно, например посчитать количество каталогов с маской \device\harddisk* или прочитать в реестре ключ для вышеупомянутого класса
|
|
|