Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дефрагментатор, С чего начать и как? 
:(
    Опции темы
serious
Дата 26.1.2004, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 15.2.2003
Где: Пенза

Репутация: нет
Всего: 1



Как написать дефрагментатор? С чего начать, и как это все работает?Кому не трудно, разрулите, пожалуйста, на пальцах.
P.S. Можно ли его написать, не используя ассемблер?


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
p0s0l
Дата 26.1.2004, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Уточни: под DOS или Win ?

Тут надо работать напрямую с FAT (как на NTFS устроен не знаю...). Ищи инфу об структуре фата, её должно быть полно.
В простейшем варианте это должно выглядеть так:
- берешь очередной файл
- освобождаешь сплошной кусок кластеров (размер куска определяется размером этого файла)
- переносишь файл на освобожденное место
- идешь на следующий файл
Конечно, тут нужно учитывать то, что нефрагментированные файлы надо пропускать, ну и некоторые другие аспекты (неперещаемые файлы), и выбирать очередной файл не как попало...
Цитата
P.S. Можно ли его написать, не используя ассемблер?

Можно.



--------------------
С уважением, г-н Посол.
PM   Вверх
serious
Дата 27.1.2004, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 15.2.2003
Где: Пенза

Репутация: нет
Всего: 1



Нужно под Виндозе...
Разъясните, как дело обстоит физически, типа, какие функции etc.
Тут можно обойтись голым API?
Цитата
QUOTE 
P.S. Можно ли его написать, не используя ассемблер? 

Можно.


Это как, например?
И как мне определять, где расположены фрагменты файла и читать их?
Или эта фигня вся в фате прописана?
Короче, вопросов туева хуча...

2pOsOl - если знаешь, что к чему, разрули поподробнее, пжалста.
ЗЫ Можно сэмпл какой-нить, если есть у кого? Можт линки какие, а то ниче в инете найти не могу sad.gif
ЗЗЫ Ребята, кто че знает, подключайтесь.


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
oleg1973
Дата 27.1.2004, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



все в фате есть
тока вот с нтфс наверно будет геморойно шибко


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
serious
Дата 27.1.2004, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 15.2.2003
Где: Пенза

Репутация: нет
Всего: 1



Читал MS SDK, там пишут, что типа для всех махинаций с фат используется int21h и приведена куча функций. Тока как все это дело использовать под Виндами?


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
Serzh
Дата 4.2.2004, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



под виндами нужно пользоваться винапишным чтением/записью в сектора...
они там должны быть, но я невидел... даже не смотрел smile.gif
PM MAIL WWW ICQ   Вверх
serious
Дата 13.2.2004, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 15.2.2003
Где: Пенза

Репутация: нет
Всего: 1



2Serzh: А че за функции такии записи-чтения (Ну в смысле которые WinAPI). Разрулите, плзззз.


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
p0s0l
Дата 13.2.2004, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 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...



--------------------
С уважением, г-н Посол.
PM   Вверх
p0s0l
Дата 13.2.2004, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Для чтения/записи диска я могу привести 2 способа:
1) Способ, который у меня работает:
Открой файл "\\.\C:" (или что тебе надо) и делай ReadFile/WriteFile ! Всё просто до ужаса, даже не интересно...
Для установки позиции чтения - SetFilePointer, гранулярность позиции - 512 байт, т.е. если тебе надо прочитать 5-ый сектор, что позицию ставь 5*512...
2) Способ, который у меня не работает, т.к. ему нужен Win9x sad.gif:
Открой файл "\\.\vwin32" и можешь вызывать прерывания DOS Int13/Int25/Int26 через DeviceIOControl.
Для этого вот тебе константы и пример из MSDN:
Код
VWIN32_DIOC_DOS_IOCTL = 1
VWIN32_DIOC_DOS_INT25 = 2
VWIN32_DIOC_DOS_INT26 = 3
VWIN32_DIOC_DOS_INT13 = 4
VWIN32_DIOC_DOS_DRIVEINFO = 6

Код
#define VWIN32_DIOC_DOS_IOCTL 1

typedef struct _DIOC_REGISTERS {
   DWORD reg_EBX;
   DWORD reg_EDX;
   DWORD reg_ECX;
   DWORD reg_EAX;
   DWORD reg_EDI;
   DWORD reg_ESI;
   DWORD reg_Flags;
} DIOC_REGISTERS, *PDIOC_REGISTERS;

// Important: All MS_DOS data structures must be packed on a
// one-byte boundary.

#pragma pack(1)
typedef struct _MID {
   WORD  midInfoLevel;
   DWORD midSerialNum;
   BYTE  midVolLabel[11];
   BYTE  midFileSysType[8];
} MID, *PMID;
#pragma pack()

HANDLE hDevice;
DIOC_REGISTERS reg;
MID mid;
BOOL fResult;
DWORD cb;
int nDrive = 3;  // Drive C:

hDevice = CreateFile("\\\\.\\vwin32",
   0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL);

reg.reg_EAX = 0x440D;       // IOCTL for block devices
reg.reg_EBX = nDrive;       // zero-based drive identifier
reg.reg_ECX = 0x4866;       // Get Media ID command
reg.reg_EDX = (DWORD) ∣ // receives media identifier information
reg.reg_Flags = 0x0001;     // assume error (carry flag is set)

fResult = DeviceIoControl(hDevice,
   VWIN32_DIOC_DOS_IOCTL,
   &reg, sizeof(reg),
   &reg, sizeof(reg),
   &cb, 0);

if (!fResult || (reg.reg_Flags & 0x0001))
  ; // error if carry flag is set

CloseHandle(hDevice);




--------------------
С уважением, г-н Посол.
PM   Вверх
serious
Дата 24.2.2004, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 15.2.2003
Где: Пенза

Репутация: нет
Всего: 1



А если драйвер режима ядра накатать?


--------------------
Я знаю то, что ничего не знаю, а некоторые не знают и этого.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.