![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
_Leo_ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 12.9.2007 Репутация: -1 Всего: 0 |
Задача: Написать программу на Visual C++, которая позволила бы из под Windows удалить раздел FAT 32, востановить
раздел. Что то типа мини Partition Magic. Вроде есть какая то WinAPI функция которая позволяет это проделать, хотя точно не знаю. Инструментарий: желательно MS Visual Studio 2005, хотя можно и в Visual C++ 6 или Builder 6. Посоветуйте, где начать копать? |
|||
|
||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: 3 Всего: 6 |
Функция CreateFile:
перевод мой: вы можете использовать функцию CreateFile для открытия физического диска или тома. Эта функция возвратит handle, который может быть использован функцией DeviceIoControl. Это открывает доступ к таблице разбиения дисков. Это очень опасно, убедитесь (тут неинтересно)... Когда вы открываете физический диск x, строка параметра lpFileName должна иметь следующую форму: \\.\PHYSICALDRIVE<x>. Нумерация дисков начинается с нуля. Когда открывается том, то строка параметра lpFileName должна иметь следующую форму: \\.\C: Ну, про DeviceIoControl если нужно - тоже переведу. Это сообщение отредактировал(а) EnergoHokum - 13.9.2007, 07:26 |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Нет никакой API типа DeleteFat32Partition или CreateFat32Partition. Начни с изучения спецификации этой ФС.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
W4FhLF ты может копал или слышал... что скажешь насчет того как это делает оснастка винды (диспетчер носителей).... там есть методы для дефрагментации (точто есть DefragmentationAPI) , а что насчет разделов?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Что именно делает то? И диспетчер носителей - это ПКМ на Мой Компьютер > Управление Компьютером > Запоминающие устройства > Управление дисками? Инфу о таблице разделов с точки зрения разработчика можешь почитать вот здесь: http://dotfix.net/[email protected] http://symon.ru/ Можно на http://www.sourceforge.net/ поискать примеры, исходники Boot Easy + посмотреть исходники React OS || Lunix. Глянуть http://www.codeproject.com/system/w2003_defraginterface.asp + я давно хотел покопать библиотеку винды для форматирования и проверки FAT32 и NTFS - ifsutil.dll. Она видимо и используется диспетчером носителей, точно не знаю. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
ну или штаный форматтер винды , тот что format .... вот что нашел... http://www.microsoft.com/technet/sysintern...Code/fmifs.html будешь рыть где-нить отпишись )) странная фигня, но с оригинального сайта похоже вальнули) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
MS купила sysinternals, а Руссинович сейчас в MS и работает, если ты об этом. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
Ага, полезно. Так ты скачал исзодники? Меня с этой ссылки опять на MS перекидывает.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
court.shrock.org/sysinternals-bt/
|
|||
|
||||
GIK |
|
||||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: нет Всего: 14 |
![]() -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
||||
|
|||||
_Leo_ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 12.9.2007 Репутация: -1 Всего: 0 |
EnergoHokum,
А можно пожалуйста ссылку на оригинал, если конечно он не на китайском.))) |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 27 Всего: 158 |
||||
|
||||
_Leo_ |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 12.9.2007 Репутация: -1 Всего: 0 |
EnergoHokum,
Почитал на днях MSDN,полазил в Инете, интересно пишут. На сколько я понял видимость раздела Windows, определяется значением кода типа раздела System ID в таблице разделов.Если он равен нулю, то раздел не виден. Структура MBR Смещение (offset) Размер (Size) Содержимое (contents) ------------------------------------------------------------------------- 0 446 Программа анализа таблицы разделов и загрузки System Bootstrap с активного раздела ------------------------------------------------------------------------- 0x1BE 16 Partition 1 entry ( элемент таблицы разделов) ------------------------------------------------------------------------- 0x1CE 16 Partition 2 entry ------------------------------------------------------------------------- 0x1DE 16 Partition 3 entry ------------------------------------------------------------------------- 0x1EE 16 Partition 4 entry ------------------------------------------------------------------------- 0x1FE 2 Сигнатура 0xAA55 Структура записи элемента таблицы разделов показана в таблице 2. Структура записи элемента таблицы разделов Смещение Размер поля, Содержание байт ------------------------------------------------------------------------- 0x00 1 Признак активности (0 - раздел не активный, 0x80 - раздел активный) -------------------------------------------------------------------------- 0x01 1 Номер головки диска, с которой начинается раздел --------------------------------------------------------------------------- 0x02 2 Номер цилиндра и номер сектора, с которых начинается раздел ---------------------------------------------------------------------------- 0x04 1 Код типа раздела System ID ---------------------------------------------------------------------------- 0x05 1 Номер головки диска, на которой заканчивается раздел ---------------------------------------------------------------------------- 0x06 2 Номер цилиндра и номер сектора, которыми заканчивается раздел ---------------------------------------------------------------------------- 0x08 4 Абсолютный (логический) номер начального сектора раздела ---------------------------------------------------------------------------- 0x0C 4 Размер раздела (число секторов) Только не совсем понял как читать/записать в этот System ID с помощью контрол-кода IOCTL_DISK_GET_DRIVE_LAYOUT_EX/IOCTL_DISK_SET_DRIVE_LAYOUT_EX. Вроде надо работать со структурой PARTITION_INFORMATION_EX или просто отсчитать смещение в 450 байт от значения StartingOffset и жахнуть туда ноль. Вобшем нажал на кнопочку и раздел fat32 не виден, нажал на другую, и о радость!!!, он появился. |
|||
|
||||
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: нет Всего: 8 |
гдето так. _Leo_, я такое на втором курсе делал, да и то под досом (задание такое было). Под виндой файл открыть можно, да делал, читал MBR, но уж сильно сомневаюсь что ХР даст тебе туда чтонить записать. И вообще это что лаба? -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |