![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как не через fdisk, а програмно установить активный раздел на HDD [D6, Win95/98]
DD © (2002-11-05 00:47:00)Очень часто приходится переустанавливать windows стирая все подчастую( через Diskedit), чтоб не подхватить вирус,так вот встал вопрос как это сделать програмно?
Денис (2002-11-11 22:19:00) [1]>>Ihor Osov"yak
Огромное спасибо за волшебный набор слов и потраченные 8 мин!
Из них я понял, что активный раздел под fat32 лучше всего ставить на добром старом assembler-е!
Ihor Osov'yak (2002-11-10 22:26:00) [2]В дополнение
(в качесте приза) Под 98 - тот же int13, но либо из 16-битной длл, либо из vxd. Более подробную инфу - сорри. Считайте что из злобства (на самом деле, как говорит Подгорецкий - по религиозным убеждениям).
Да, еще альтернативный вариант - напишите елементарную програмульку на старом добром паскале и запускайте ее из-под доса ...
Ihor Osov'yak (2002-11-10 22:21:00) [3]Даем волшебный набор слов
set partitions a disk DeviceIOControl
и по четвертой ссылке получаем
IOCTL_DISK_SET_DRIVE_LAYOUT
Using the IOCTL_DISK_SET_DRIVE_LAYOUT operation partitions a disk as specified by drive layout and partition information data.
To perform this operation, call the DeviceIoControl function with the parameters specified below.
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to device
IOCTL_DISK_SET_DRIVE_LAYOUT, // dwIoControlCode operation
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
NULL, // lpOutBuffer; must be NULL
0, // nOutBufferSize; must be zero
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
Parameters
hDevice
[in] Handle to the disk drive to be partitioned. To obtain a device handle, call the CreateFile function.
dwIoControlCode
[in] Control code for the operation. This value identifies the specific operation to be performed and the type of device on which to perform it. Use IOCTL_DISK_SET_DRIVE_LAYOUT for this operation.
lpInBuffer
[in] Pointer to a buffer that contains drive layout and partition information data. The data exists as a DRIVE_LAYOUT_INFORMATION data structure and a series of PARTITION_INFORMATION data structures, one of the latter for each proposed partition on the drive.
Вам нужно обратить внимание на структуру
PARTITION_INFORMATION, в часности на члена BootIndicator
Если будут проблемы с переводом на раскаль - пишите сюда, может помогу.
Да, "Handle to the disk drive to be partitioned" - для открытия юзайте
CreateFile(pchar("\\.\PhysicalDrive"+IntToStr(drv)),
.....
где drv = 0 для первого харда, 1 - для второго итд
Под 98 - таких функций нет, либо они мне неизвестны. Нужно действительно писать конкретные байты по конкретному смещению -
см Opuhshii © (06.11.02 07:14)
Зы. Похожая инфо есть и в хелпе к делфи
Итого около 6 минут на поиск и 8 минут на написание ответа ....
Это я к тому, что учитесь работать, а не гвалт на конференции подымать.
Ihor Osov'yak (2002-11-10 22:01:00) [4]Милый вы мой, Денис, обратите внимание, что первоначальный мой постинг указывал на некоректность ответа 2 Song © (05.11.02 15:25). В части возможности/невозможности програмного доступа на физическом уровне.
Что касается конкретного ответа на ваш Вапрос, ок, запускаю секундомер и делаю поиск по msdn. По завершению поиска - буду постить продолжение. ОК?
Денис (2002-11-10 21:39:00) [5]А на счет двоек - чтож вы "учителя", двойки ставить молодцы, а ответа не дождешся?
Денис (2002-11-10 21:23:00) [6]>>Ihor Osov"yak
Сформатируйте один винт, набросайте туда стандартный набор софты или установочных пакетов - и делайте клонирование на аналогичные винты тем же Paragon Disk Copy
С этим све понятно, я так последние 2года и делаю, но вопрос то
был "Как програмно через Delphi установить активный раздел!"
А по поводу вирусов, прошу больше ни слова - "по себе людей не судят!"
Да и вообще, кто конкретно помочь не может, прошу воду не мутить!
Ihor Osov'yak (2002-11-10 18:44:00) [7]2 Vint © (10.11.02 14:15)
Если человек не может самостоятельно разобратся с этим вопросом,
то он так и остановится на уровне написателя вирусов. Ибо в системном програмирровании это далеко не самая большая проблема.
Это имхо.
Во вторых, есть намного более интересные проблемы, чем написание вирусов, и которые експириенс значительно сильнее повышают, чем виросописание...
2 Денис (10.11.02 02:07) - конструктивное предложение: Сформатируйте один винт, набросайте туда стандартный набор софты или установочных пакетов - и делайте клонирование на аналогичные винты тем же Paragon Disk Copy (лицензия - всего 40уе, ну и гуляет срякнутая версия)
Для разных типоразмеров - тот же Paragon Disk Copy умеет ресайз он флай делать...
Vint (2002-11-10 14:15:00) [8]Чо на человека то наезжаете? он помощи попросил, а вы ...
Нет времени или желания помогать, так и молчите вовсе, а то типа я такой целомудренный, что руки о тебя пачкать не буду! а вдруг он вирусы пишет - ДА ПУСТЬ ПИШЕТ на здоровье, пусть учиться и развивается, сегодня он напишет вирус, а завтра он может придумает супер-прогу по борьбе с ними. Ведь те кто написал Partition Magic тоже не заставки одни наверное писали!
pasha676 (2002-11-10 08:55:00) [9]Старая шутка но не удержался.
Анатолий, Денис работает формацептом. Он диски "С" форматирует :).
Денис (2002-11-10 02:07:00) [10]>>Anatoly Podgoretsky
Денис (09.11.02 01:53)
Интересная у тебя работа по 4-5 раз в день диск переформатировать
Ага, работа моя в компьютерном сервисе...(ПБОЮЛ)
Anatoly Podgoretsky (2002-11-09 11:50:00) [11]Денис (09.11.02 01:53)
Интересная у тебя работа по 4-5 раз в день диск переформатировать
Ruf (2002-11-09 11:43:00) [12]Если нужно написать - пиши,
а для использования рекомендую
POWER QUEST:
Partition Magic
Boot Magic
и тд. Вещь посто супер!
Денис (2002-11-09 01:53:00) [13]Ну раз путевых ответов нет, спасибо German-у хоть за совет с ключами к Fdisk-у(а то раза по 4-5 в день с этим парюсь)...
TankMan (2002-11-09 00:40:00) [14]Удалено модератором
Ihor Osov'yak (2002-11-08 12:57:00) [15]2 Song © (05.11.02 15:25)
>>Поэтому можно безболезненно редактировать Partition Table.
Ok, программно можете?
Да, могу. И под линейкой 9x, и под линейкой NT. Там и там решения разные.
2 German (08.11.02 08:20)
> Существует ли какая-либо функция winapi позволяющая перезаписать
> MBR ака загрузочный сектор физического диска (с координатами
> 0/0/1) не путать с DOS секторами логических дисков
Существует решение, использующие документированные свойства. Можете считать это функциями ейпи.
> А вообще почитай что-либо про 13H прерывание BIOS
Из под win32 на линейке w9x через int13 Вы сможете только с флопиком поработать. Но не с HDD. Под nt забудьте.
ЗЫ. Готовых решений в публичное место не брошу (хотя бы потому, что Подгорецкий мысль высказал что не стоит помогать писателям троянов. Во вторых, эти решения (большинство - free, слегка глючивые, но вполне работоспособные) уже лежат в публичных местах (авторство не мое) - учитесь искать. В третьих - используются только документированые средства - читайте внимательно MSDN).
Maestro_V (2002-11-08 12:44:00) [16]Согласен, подход весьма странный. С вирусами обычно разбираются по-другому. Но вопрос зартонут интересный. Я хочу вот что сказать: PartitionMagic 7 как-то же это делает. Я сам переразбивал диски не выходя при этом из Виндов. Пока там все происходило я даже попутно работал в Интернете. Так же устанавливаются активные разделы и все остальное и не выходя и не перегружаясь.
Значит какие-то функции существуют ..??
Игорь Шевченко (2002-11-08 12:10:00) [17]
> И зря, некоторые наезжают, что это для вирусов, просто часто
> друзья обращаются с просбой снести windows.
А мне можно снести ? :-)
German (2002-11-08 08:20:00) [18]Дабы вы зря человека не парили, давайте я вам вопрос переформулирую.
Существует ли какая-либо функция winapi позволяющая перезаписать MBR ака загрузочный сектор физического диска (с координатами 0/0/1) не путать с DOS секторами логических дисков
ps: Если тебе никто ничего путного не посоветует, попробуй запустить из под своей проги обычный fdisk с параметром /MBR
вот так fdisk /mbr
Он сам без дополнительных вопросов перепишет загрузчик. Там еще есть какой-то недокументированный ключ позволяющий указать номер диска.
А вообще почитай что-либо про 13H прерывание BIOS
С таблицей не парься, просто впиши код нормального загрузчика поверх того что сидит на твоем диске. начинается он со смещения 0, а где заканчивается посмотри дискедитором. MBR выглядит так
0..xx [загрузчик]
xx..512[таблица разделов]
Вот и восстанавливай загрузчик не трогая таблицы.
blackleo (2002-11-07 21:15:00) [19]Sorry za latin no russkih bukv na klave netu ;(
A na DD zrja napali, u nas na firme VSE klientskie masini prohodjat takuju obrabotku /na vsakij sluchai ;))/
a k voprosu prisojedinajus, a to servesnije rebata tolko diskedit rukami atrabotivajut, vse ostolnoje uze dovno automatizirovano ;)
TankMan (2002-11-06 21:13:00) [20]Удалено модератором