![]() |
|
|
![]()
|
|
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
Как написать дефрагментатор? С чего начать, и как это все работает?Кому не трудно, разрулите, пожалуйста, на пальцах.
P.S. Можно ли его написать, не используя ассемблер? -------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Уточни: под DOS или Win ?
Тут надо работать напрямую с FAT (как на NTFS устроен не знаю...). Ищи инфу об структуре фата, её должно быть полно. В простейшем варианте это должно выглядеть так: - берешь очередной файл - освобождаешь сплошной кусок кластеров (размер куска определяется размером этого файла) - переносишь файл на освобожденное место - идешь на следующий файл Конечно, тут нужно учитывать то, что нефрагментированные файлы надо пропускать, ну и некоторые другие аспекты (неперещаемые файлы), и выбирать очередной файл не как попало...
Можно. -------------------- С уважением, г-н Посол. |
|||
|
||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
Нужно под Виндозе...
Разъясните, как дело обстоит физически, типа, какие функции etc. Тут можно обойтись голым API?
Это как, например? И как мне определять, где расположены фрагменты файла и читать их? Или эта фигня вся в фате прописана? Короче, вопросов туева хуча... 2pOsOl - если знаешь, что к чему, разрули поподробнее, пжалста. ЗЫ Можно сэмпл какой-нить, если есть у кого? Можт линки какие, а то ниче в инете найти не могу ЗЗЫ Ребята, кто че знает, подключайтесь. -------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 7 Всего: 34 |
все в фате есть
тока вот с нтфс наверно будет геморойно шибко -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
Читал MS SDK, там пишут, что типа для всех махинаций с фат используется int21h и приведена куча функций. Тока как все это дело использовать под Виндами?
-------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| Serzh |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 30.9.2003 Где: SPb Репутация: нет Всего: нет |
под виндами нужно пользоваться винапишным чтением/записью в сектора...
они там должны быть, но я невидел... даже не смотрел |
|||
|
||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
2Serzh: А че за функции такии записи-чтения (Ну в смысле которые WinAPI). Разрулите, плзззз.
-------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Кстати, для NTFS'а под XP и 2000 предусмотрен Defragmentation API - это три управляющих кода DeviceIOControl, так что даже не надо знать структуру и устройство NTFS... Для этого используются:
1. FSCTL_GET_VOLUME_BITMAP - для получения карты диска занятых и свободных кластеров 2. FSCTL_GET_RETRIEVAL_POINTERS - для получения информации о текущем расположении файлов на диске 3. FSCTL_MOVE_FILE - для переноса кластеров Подробнее - читай MSDN... -------------------- С уважением, г-н Посол. |
|||
|
||||
| p0s0l |
|
||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Для чтения/записи диска я могу привести 2 способа:
1) Способ, который у меня работает: Открой файл "\\.\C:" (или что тебе надо) и делай ReadFile/WriteFile ! Всё просто до ужаса, даже не интересно... Для установки позиции чтения - SetFilePointer, гранулярность позиции - 512 байт, т.е. если тебе надо прочитать 5-ый сектор, что позицию ставь 5*512... 2) Способ, который у меня не работает, т.к. ему нужен Win9x Открой файл "\\.\vwin32" и можешь вызывать прерывания DOS Int13/Int25/Int26 через DeviceIOControl. Для этого вот тебе константы и пример из MSDN:
-------------------- С уважением, г-н Посол. |
||||
|
|||||
| serious |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 15.2.2003 Где: Пенза Репутация: нет Всего: 1 |
А если драйвер режима ядра накатать?
-------------------- Я знаю то, что ничего не знаю, а некоторые не знают и этого. |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |