Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |  |  |  |
Подскажите каким образом в WIN98 можно определить номер начального кластера и сектора для нужного файл 02.10.01 00:30 Число просмотров: 989
Автор: Бяша <Biasha> Статус: Member Отредактировано 02.10.01 00:34 Количество правок: 1
|
> А ФАТ32 твоя прога уже понимает ? Если да, то намыль мне > plz Рассказываю:
Когда-то очень давно у меня так случилось, что не стало фата на разделе ФАТ32.
Я знал, что большинство моих файлов не фрагментировано, потому решил по методу UnErase'а его восстановить.
Весело было: грузился с дискеток, создавал диск в памяти, и писал на паскале.
Поскольку писалось это для себя, с предельно максимальной скоростью, и в неудобном окружении, то программа получилась весьма тяжело читаемой.
Да и вообще: это не программа, а набор программ, каждая из которых делала маленькую часть работы (одна сканировала диск, другая искала пересекающиеся файлы, третья записывала фат и т. д.)
Так что понимать ФАТ32 здесь особо было не нужно - мне было легче в DiskEdit глянуть, чем, например, искать самому начало того же фата.
После того случая, ещё два раза возвращался к теме чтения через биос, всё что есть сейчас по этому поводу выкладываю на www.biasha.al.ru/files/biosdisk.zip
P.S.
Всем желающим разобраться в тех исходниках я искренне сочувствую. :)
http://www.biasha.al.ru/files/biosdisk.zip
|
|
<programming>
|
Подскажите каким образом в WIN98 можно определить номер начального кластера и сектора для нужного файл 28.09.01 08:50
Автор: J Статус: Незарегистрированный пользователь
|
|
Делаю кряк к одной старинной проге - у нее типа защита есть. В последний кластер этой проги дописывается несколько байтиков,без которых она не хочет работать.Сделал прогу на асме,которая добавляет в нужное место нужные байтики. Использовались функции DOS 3dh и 5200h,далее по таблице открытых файлов находится кластер, сектор и производится запись.НО ВСЕ ЭТО НЕ РАБОТАЕТ ПОД WIN98 (другие не смотрел)! А работает только из DOS. Подскажите,пожалуйста,кто знает, каким образом в виндах определить номер кластера и сектора.
|
 |
Подскажите каким образом в WIN98 можно определить номер начального кластера и сектора для нужного файл 28.09.01 09:44
Автор: :-) <:-)> Статус: Elderman
|
> Делаю кряк к одной старинной проге - у нее типа защита > есть. В последний кластер этой проги дописывается несколько > байтиков,без которых она не хочет работать.Сделал прогу на > асме,которая добавляет в нужное место нужные байтики. > Использовались функции DOS 3dh и 5200h,далее по таблице > открытых файлов находится кластер, сектор и производится > запись.НО ВСЕ ЭТО НЕ РАБОТАЕТ ПОД WIN98 (другие не > смотрел)! А работает только из DOS. > Подскажите,пожалуйста,кто знает, каким образом в виндах > определить номер кластера и сектора.
А зачем так сложно?
В хвост файла обычно пишут более простым способом:
- позиционируешь указатель файла в нужное место за концом файла
- записываешь данные
- позиционируешь указатель на прежней длине файла
- усекаешь файл (truncate)
И не надо никаких недокументированных SFT
|
 |  |
Подскажите каким образом в WIN98 можно определить номер начального кластера и сектора для нужного файл 28.09.01 10:23
Автор: J Статус: Незарегистрированный пользователь
|
> А зачем так сложно? > В хвост файла обычно пишут более простым способом: > - позиционируешь указатель файла в нужное место за концом > файла > - записываешь данные > - позиционируешь указатель на прежней длине файла > - усекаешь файл (truncate) > > И не надо никаких недокументированных SFT
Спасибо за ответ.
Но это теперь неважно уже - проблема решена.
Но я все равно хотел бы узнать каким образом в виндах можно узнать номер кластера и сектора, с которых начинается файл?
|
 |  |  |
Подскажите каким образом в WIN98 можно определить номер начального кластера и сектора для нужного файл 28.09.01 23:29
Автор: Бяша <Biasha> Статус: Member
|
> Но я все равно хотел бы узнать каким образом в виндах можно > узнать номер кластера и сектора, с которых начинается файл? Я уже не помню точно как там в 98 (в нт точно непройдёт), но разве нельзя биосовским инт13 просмотреть все каталоги до нужного файла?
Могу дать даже пример частично законченый, для себя писаный, под дос, который таким занимался, на паскале.
|
 |  |  |  |
Подскажите каким образом в WIN98 можно определить номер начального кластера и сектора для нужного файл 29.09.01 12:10
Автор: :-) <:-)> Статус: Elderman
|
> Я уже не помню точно как там в 98 (в нт точно непройдёт), > но разве нельзя биосовским инт13 просмотреть все каталоги > до нужного файла? > Могу дать даже пример частично законченый, для себя > писаный, под дос, который таким занимался, на паскале.
А ФАТ32 твоя прога уже понимает ? Если да, то намыль мне plz
2J:
Так нужно определить первый кластер файла из-под досовской проги, работающей под Win98 или из Win32-проги?
Если из-под досовкой, вот еще один способ в дополнение к FCB FindFirst:
INT 21 - MS-DOS 7.0+ - GENERIC IOCTL - GET FIRST CLUSTER
AX = 440Dh
CX = 0871h (category code 08h/48h, minor code 71h)
BX = filename character set (see #01578)
DS:DX -> ASCIZ pathname for file or directory
Return: CF set on error
AX = error code (01h,02h,etc.)
CF clear if successful
DX:AX = first cluster number
Note: this function finds any file or directory regardless of attributes,
except that it will not find volume labels
(Table 01578)
Values for character set:
00h Windows ANSI
01h current OEM character set
02h Unicode
Values for block device IOCTL category code:
08h disk drive
48h FAT32 disk drive
---
А если это нужно из-под Win32, то общие способы такие:
1) 16-битовая DLL, которая будет вызывать вышеназванную ф-ю Int 21h
2) прямой доступ к диску с самостоятельынм разбором ФАТ
3) писать драйвер и юзать сервисы ring0
|
 |  |  |  |  |
Подскажите каким образом в WIN98 можно определить номер начального кластера и сектора для нужного файл 02.10.01 00:30
Автор: Бяша <Biasha> Статус: Member Отредактировано 02.10.01 00:34 Количество правок: 1
|
> А ФАТ32 твоя прога уже понимает ? Если да, то намыль мне > plz Рассказываю:
Когда-то очень давно у меня так случилось, что не стало фата на разделе ФАТ32.
Я знал, что большинство моих файлов не фрагментировано, потому решил по методу UnErase'а его восстановить.
Весело было: грузился с дискеток, создавал диск в памяти, и писал на паскале.
Поскольку писалось это для себя, с предельно максимальной скоростью, и в неудобном окружении, то программа получилась весьма тяжело читаемой.
Да и вообще: это не программа, а набор программ, каждая из которых делала маленькую часть работы (одна сканировала диск, другая искала пересекающиеся файлы, третья записывала фат и т. д.)
Так что понимать ФАТ32 здесь особо было не нужно - мне было легче в DiskEdit глянуть, чем, например, искать самому начало того же фата.
После того случая, ещё два раза возвращался к теме чтения через биос, всё что есть сейчас по этому поводу выкладываю на www.biasha.al.ru/files/biosdisk.zip
P.S.
Всем желающим разобраться в тех исходниках я искренне сочувствую. :)
http://www.biasha.al.ru/files/biosdisk.zip
|
 |  |  |  |  |
Самому интересно стало 29.09.01 16:28
Автор: :-) <:-)> Статус: Elderman Отредактировано 29.09.01 16:34 Количество правок: 1
|
Вот как это сделать в Win32 (Win9x only) :
#define Not_VxD
#include <stdio.h>
#include <windows.h>
#include "VWin32.h"
void main()
{
char szPathName[] = "c:\\command.com";
HANDLE hVWin32;
DIOC_REGISTERS regs;
DWORD cb;
hVWin32 = CreateFile("\\\\.\\VWIN32", 0, 0, NULL, 0, 0, NULL);
// Lock logical volume
regs.reg_EAX = 0x440D;
regs.reg_EBX = 0x103; // Level 1, drive C:
regs.reg_ECX = 0x84A;
regs.reg_EDX = 7;
DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL,
®s, sizeof(regs),
®s, sizeof(regs), &cb, NULL);
if (regs.reg_Flags & 1)
printf("Error: Couldn't lock volume!\n");
// Get 1'st cluster
regs.reg_EAX = 0x440D;
regs.reg_EBX = 0;
regs.reg_ECX = 0x0871;
regs.reg_EDX = (DWORD) &szPathName;
DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL,
®s, sizeof(regs),
®s, sizeof(regs), &cb, NULL);
if (regs.reg_Flags & 1)
printf("Error: %d\n", regs.reg_EAX);
else
printf("Filename: %s\n1'st cluster = 0x%X\n",
szPathName, MAKELONG(regs.reg_EAX, regs.reg_EDX));
// Unlock logical volume
regs.reg_EAX = 0x440D;
regs.reg_EBX = 3;
regs.reg_ECX = 0x86A;
DeviceIoControl(hVWin32, VWIN32_DIOC_DOS_IOCTL,
®s, sizeof(regs),
®s, sizeof(regs), &cb, NULL);
CloseHandle(hVWin32);
}
---
HTML rulez :(
Все &rеgs заменились на ®s :(
|
 |  |  |
Подскажите каким образом в WIN98 можно определить номер начального кластера и сектора для нужного файл 28.09.01 13:19
Автор: :-) <:-)> Статус: Elderman
|
> Спасибо за ответ. > Но это теперь неважно уже - проблема решена. > Но я все равно хотел бы узнать каким образом в виндах можно > узнать номер кластера и сектора, с которых начинается файл?
Можно юзать FCB-фии FindFirst/FindNext. Они возвращают в DTA первый кастер файла
|
|
|