информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Все любят медАтака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 700 с лишним git-серверов пострадало... 
 От повторного пришествия Шаи-Хулуда... 
 Крупный сбой Azure и других сервисов... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Подскажите каким образом в 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 первый кастер файла
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach