Форум: "WinAPI";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Внизизменение размера сектора Найти похожие ветки
← →
Fabo (2004-09-01 13:36) [0]Как можно длину какого-нибудь сектора жесткого диска менять с 512 байтов на другую?
← →
Digitman © (2004-09-01 13:48) [1]т.е. одного-единственного среди прочих, оставшихся при этом при размере 512 ?
а никак
эта характеристика задается при форматировании всего носителя
← →
VMcL © (2004-09-01 14:21) [2]AFAIK, размер сектора нельзя поменять вообще, он всегда 512 байт. А вот кластера можно, но, естественно, при переформатировании.
← →
Digitman © (2004-09-01 14:23) [3]
> VMcL © (01.09.04 14:21) [2]
чтой-то вдруг нельзя ? на то и есть физическое форматирование
← →
Sergey Kaminski © (2004-09-01 14:44) [4]Disk Base Table байт 03 указывает кол-во байт на физ. сектор. Эту структуру используют сервисы int 13h.
Только физ. формат
← →
Sergey Kaminski © (2004-09-01 14:46) [5]...ирование.
Ссори, случайно кусок слова Ctrl-X. :)
← →
Игорь Шевченко © (2004-09-01 14:51) [6]Digitman © (01.09.04 14:23) [3]
> чтой-то вдруг нельзя ? на то и есть физическое форматирование
Это достоверная информация ? Я могу сделать размер сектора (пусть на всем диске), скажем, 644 байта ?
← →
Digitman © (2004-09-01 15:03) [7]
> Игорь Шевченко © (01.09.04 14:51) [6]
ну ты зря утрируешь, Игорь
прекрасно же знаешь, что размер сектора при форматировании не может быть выбран "от балды" - он должен быть кратен "заветной" степени двойки ... причем набор допустимых "кратных" значений тоже фиксирован по числу элементов
← →
Digitman © (2004-09-01 15:08) [8]
> Игорь Шевченко
"когда компьютеры были маленькими" (i80286 был верхом совершенства), а я , соответственно, был еще совсем зеленым и амбициозном в этом деле, "лепил" я как-то раз свою "файловую систему" для "защиты от копирования" из-под MS-DOS ... причем беспардонно содрал ее идею с хорошо известной мне ОС РАФОС, но при этом "нарезал" 5-дюймовый флопик на сектора размером в 1к ... все замечательно, кстати, получалось и так же замечательно работало, хоть и бестолковый труд был в конечном счете
← →
Игорь Шевченко © (2004-09-01 15:11) [9]Digitman © (01.09.04 15:03) [7]
Сергей, я просто спрашиваю, я не в курсе современных веяний :)
Насколько я помню, на флоппи-дисках такие фокусы можно было проделывать, благо там контроллер был простой и атрибуты сектора на диске были записаны в служебном заголовке сектора.
А у винтов вроде есть буфер сектора(ов) (могу, конечно, чушь ляпнуть), а не буфер дорожки целиком и контроллер отдает информацию из буфера сектора(ов).
Поправь, если я ошибаюсь.
← →
Digitman © (2004-09-01 15:25) [10]
> Игорь Шевченко © (01.09.04 15:11) [9]
> Поправь, если я ошибаюсь
утверждать обратное не буду, но контроллер контроллеру рознь ... разумеется, я о том контроллере, который стоит на борту винта, а не IDE/EIDE/SCSI и иже с ними ..
← →
Игорь Шевченко © (2004-09-01 15:40) [11]Digitman © (01.09.04 15:25) [10]
> разумеется, я о том контроллере, который стоит на борту
> винта
Некая разновидность RLL-контроллера там, наверное, стоит, хотя, могу и ошибаться, так как не знаю достоверно, что находится на современных винтах. На старых IDE на самом винте стоял интегрированный RLL-контроллер.
← →
Dimaxx (2004-09-02 00:33) [12]С винтом такие шуточки не пройдут - это не дискета. Этот размер "зашит" на аппаратном уровне. И не нам лезть в аппаратку, если не хочешь проблем на свою голову.
← →
Shiza (2004-09-02 11:25) [13]Позвольте вмешаться господа в вашу дискуссию. Могу сказать следующее: размер сектора можно изменить, но MS-DOS работает только с секторами размером 512 байт, остальные она неувидит. Но если ваша программа будет читать диск средствами BIOS (13int) то пожалуйста, изменяйте.
← →
Игорь Шевченко © (2004-09-02 12:22) [14]Shiza (02.09.04 11:25)
> Но если ваша программа будет читать диск средствами BIOS
> (13int) то пожалуйста, изменяйте.
В каком именно месте изменять и есть ли работающий пример такого изменения ?
← →
Sergey Kaminski © (2004-09-02 17:00) [15]Игорь Шевченко © (02.09.04 12:22) [14]
Int 13, AH = 5
Format Disk Track.
ES:BX указывает на структуру 4-й байт которой содержит код размера сектора. См. также [4].
← →
Shiza (2004-09-02 17:52) [16]>В каком именно месте изменять...
Начиная с байта с порядковым номером 12 в загрузочном секторе распологается Блок Параметров БИОС (BPB). Вот его структура:
type
BPB=record
SecSize:Word;//количество байт в секторе
...
остальные поля этой структуры не привожу.
>и есть ли работающий пример такого изменения?
Под Win32 немного сложновато, потому что обращение к сервисам 13int напрямую в отношении жестких дисков недопустимо. Но в MSDN есть пример работы с HD под Win32, но он к сожалению на С++.
А вот под DOS, если честно, изменял сектора но на дискете. С жестким диском всё-таки пока страшновато... вот если б был ненужный винт поэксперементировать...
← →
Игорь Шевченко © (2004-09-03 10:09) [17]Shiza (02.09.04 17:52) [16]
> А вот под DOS, если честно, изменял сектора но на дискете
Так на дискете и я изменял :)
Sergey Kaminski © (02.09.04 17:00) [15]
Для не-дискет это имеет смысл ?
Почему спрашиваю - потому что в MSDN для DeviceIoControl и кодов IOCTL_FORMAT_TRACK и IOCTL_FORMAT_TRACK_EX в параметрах форматирования задать размер сектора нельзя.
← →
Shiza (2004-09-03 10:40) [18]> для DeviceIoControl и кодов IOCTL_FORMAT_TRACK и IOCTL_FORMAT_TRACK_EX в параметрах форматирования задать размер сектора нельзя.
А необязательно использовать коды IOCTL_FORMAT_TRACK и IOCTL_FORMAT_TRACK_EX. Главное при работе с DeviceIoControl обратиться к 13int, а остальное уже дело только Ваших рук и головы. Господа я ещё забыл о том, что для работы с 13int можно использовать и драйвер виртуального устройства (vxd).
Изменить размер сектора - можно. Однозначно. Под DOS легко, под Win32 сложноее, но МОЖНО.
← →
Игорь Шевченко © (2004-09-03 10:45) [19]
> Главное при работе с DeviceIoControl обратиться к 13int
Э....DeviceIoControl вообще-то не обращается к int13....
Shiza (03.09.04 10:40) [18]
> Изменить размер сектора - можно. Однозначно. Под DOS легко,
> под Win32 сложноее, но МОЖНО.
А ссылку на примерчик можно ? Хоть на С, хоть на чем, абы менял размер сектора у жесткого диска ?
← →
Shiza (2004-09-03 16:25) [20]>Э....DeviceIoControl вообще-то не обращается к int13
Как же не обращается? В SDK заглянуть можно, и что мы там увидим:
"Windows 95 provides a VxD named VWIN32.VXD that supports a set of control codes that Win32-based applications can use to carry out selected MS-DOS system functions. These system-defined control codes consist of the following values.
Control code (value) Meaning
VWIN32_DIOC_DOS_DRIVEINFO (6) Performs Interrupt 21h Function 730X commands. This value is supported in Windows 95 OEM Service Release 2 and later.
VWIN32_DIOC_DOS_INT13 (4) Performs Interrupt 13h commands
VWIN32_DIOC_DOS_INT25 (2) Performs the Absolute Disk Read command (Interrupt 25h)
VWIN32_DIOC_DOS_INT26 (3) Performs the Absolute Disk Write command (Interrupt 25h)
VWIN32_DIOC_DOS_IOCTL (1) Performs the specified MS-DOS device I/O control function (Interrupt 21h Function 4400h through 4411h)"
ниже идёт код из SDK поэтому не обижайтесь что на С++ :)
hDevice = CreateFile("\\\\.\\vwin32",0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL);
fResult = DeviceIoControl(hDevice, 4,®,sizeof(reg), ®, sizeof(reg), &cb, 0); //здесь код 4 и есть код обращения к 13int
Обращается не только к 13 прерыванию, но и к 21, 25 и 26.
>А ссылку на примерчик можно?
Ну, ссылку честно признаться не видел :(
Но... могу тебе написать код, ты его почитаешь, откомпилишь, и сам проверишь. Идёт? Только одно "но". Давай сразу оговоримся, код будет для DOS или для Win32. Под Win32 быстро не напишу по двум причинам: во-первых я работаю главным бухгалтером, и программированием занимаюсь в свободное от работы время, а во-вторых это немного сложнее чем с DOS.
← →
Alex Konshin © (2004-09-03 20:08) [21]Проблема только в том, что работает это только флопиков.
Во всяком случае это утверждают те, кто пробовал - мне лично не доводилось.
Я уж не говорю про NT+.
Примеры нужно искать в утилитах форматирования. Их исходники бывают в дистрибутах всяких юниксов среди утилит подготовки диска перед установкой системы.
← →
Игорь Шевченко © (2004-09-03 22:48) [22]Shiza (03.09.04 16:25) [20]
> Ну, ссылку честно признаться не видел :(
> Но... могу тебе написать код, ты его почитаешь, откомпилишь,
> и сам проверишь. Идёт?
Ты меня извини, но Алексу Коншину я склонен доверять больше.
Если он говорит, что это для работает только для гибких дисков, в чем меня и собственный опыт убеждает, то скорее всего, экпериментировать с винчестером смысла не имеет.
Или, действительно, стоит посмотреть исходники для Unix - диски-то одни и те же.
С уважением,
← →
Dimaxx (2004-09-04 00:17) [23]Пробовал я дискету отформатировать через IOCTL_FORMAT_TRACK_EX с нестандартным кол-вом секторов на дорожке. Фиг! Форматирует только на 1.44, но не на 1.68. Куда уж там размер сектора...
← →
Alex Konshin © (2004-09-04 21:18) [24]Вообще-то я не гуру в этом вопросе.
Я не утверждаю, что subj невозможен для ATA HDD, но сомневаюсь.
Особенно сомневаюсь в том, что его можно делать меньше 512 - слишком многое там завязано на этот размер, например, многие команды возвращают результат именно этого размера.
http://www.t13.org/docs2004/D1699-ATA8-ACS.pdfИ из некоторых оговорок тоже следует, что размер сектора 512.
Например, фраза из описания 48-bit address feature set:
The optional 48-bit Address feature set allow devices with capacities up to 281,474,976,710,655 sectors. This allow device capacity up to 144,115,188,075,855,360 bytes.
Если вы поделите эти две цифры, то увидите, что подразумевается размер сектора 512.
В то же время почитайте параграфы 4.21-4.22. Насколько я понял, можно создавать секторы чуть большего размера (520-528 байт), но разные команды по-разному обрабатывают их. Некоторые все равно будут использовать 512 как размер сектора, например, READ BUFFFER, хотя остальные команды чтения будут читать сектора полностью.
Короче, на мой беглый взгляд выглядит так, что subj невозможен, но я допускаю, что я чего-то не заметил. :)
← →
Shiza (2004-09-05 10:22) [25]>Ты меня извини, но Алексу Коншину я склонен доверять больше.
Как то в форуме был вопрос о том как читать сектора жесткого диска. Я там распинался что читать сектора жесткого диска под Win32 можно и с помощью 13int, на что Алекс мне заметил, что это невозможно. Сначала я ему не поверил, но когда сам попытался прочитать сектор на жестком - получил нефиговую ошибку.
Но... недавно (где-то неделю назад), или в Knowledge Base или в MSDN, нашёл код который читает сектора жесткого диска с помощью 13int. Так что и Алекс Коншин иногда ошибается...
А теперь по теме обсуждения.
Во-первых, определимся, изменяем размер сектора под DOS или под Win32?
Во-вторых, согласны ли вы с тем, что мы обращаемся к прерыванию BIOS, а ему всё равно какой размер у сектора.
В-третьих, если кто-нибудь читал книгу Фаронова В. В. "Turbo Pascal. Практика программирования", то наверняка встретил фразу о том, что изменение размера сектора возможно. Кстати я на каком-то сайте видел эту книгу для чтения он-лайн, кому интересно можете почитать.
← →
Игорь Шевченко © (2004-09-05 10:49) [26]
> Во-первых, определимся, изменяем размер сектора под DOS
> или под Win32?
А какая разница ? Речь идет о работе с железом в данном случае, а ему по барабану, в какой операционной системе с ним работают.
> Во-вторых, согласны ли вы с тем, что мы обращаемся к прерыванию
> BIOS, а ему всё равно какой размер у сектора.
Речь идет о том, все равно ли самому контроллеру диска или нет.
Если ему все равно, тогда размер сектора можно изменить, вне зависимости от BIOS, операционной системы, и т.д. Если не все равно, тогда изменить размер не удастся ни в BIOS, ни в DOS, ни в Win32.
> В-третьих, если кто-нибудь читал книгу Фаронова В. В. "Turbo
> Pascal. Практика программирования", то наверняка встретил
> фразу о том, что изменение размера сектора возможно.
На дискете - возможно.
> Как то в форуме был вопрос о том как читать сектора жесткого
> диска
CreateFile + SetFilePointer + ReadFile
← →
Anatoly Podgoretsky © (2004-09-05 11:16) [27]Интересно в Линуксе 1024 блоки (сектора) это физическое или логическое понятие?
← →
Shiza (2004-09-05 13:47) [28]Да, господа, плодотворное у нас обсуждение :)
>Речь идет о работе с железом в данном случае, а ему по барабану, в какой операционной системе с ним работают.
То понятно, только вот мне из под DOS легче обратиться к 13int чем из под NT :)
>Интересно в Линуксе 1024 блоки (сектора) это физическое или логическое понятие?
А вот это и правда свежая мысль, надо бы высказаться господа, я пока изучу, и в понедельник думаю что-нибудь скажу...
← →
Alex Konshin © (2004-09-05 22:21) [29]Ну вы почитайте документ-то.
← →
Shiza (2004-09-06 11:19) [30]Ну что, насчёт размера сектора в Линуксе пока утверждать ничего не могу, то что успел прочитать дома на это свет не пролило...
Может чё в интернете найду...
Да, кстати, а чё за сектора у NTFS? А то я если честно с ней не знаком.
>Ну вы почитайте документ-то.
Подожди, дай скачать...
← →
Dimaxx (2004-09-06 23:26) [31]В Линухе размер сектора логическое понятие. То есть файловая система использует именно этот размер, а физический - все равно останется 512 байт.
NTFS - это совмещение кластерного и потокового метода хранения файлов. У нее тоже есть FAT (вернее MFAT), только немного не такая. У нее фрагментация файлов бывает редко и только в том случае, если записать нефрагментированный файл невозможно (а на самом деле это не так - еще как фрагментируются).
← →
Dimaxx (2004-09-06 23:28) [32]Пардон, забыл...
Меняется там все равно размер кластера, а не сектора. Он как был полкило, так и останется...
← →
Игорь Шевченко © (2004-09-07 10:03) [33]
> У нее тоже есть FAT (вернее MFAT), только немного не такая
Еще вернее - MFT, которая вовсе не FAT
← →
Shiza (2004-09-07 10:06) [34]вВопрос такой родился:
Когда диск отформатирован под NTFS, то 13int не работает. Почему?
>В Линухе размер сектора логическое понятие.То есть файловая система использует именно этот размер, а физический - все равно останется 512 байт.
Интересно, зачем это системе логический сектор, если есть кластер?
И ещё. Вот цитата из книги Фаронова В. В.: "С физической точки зрения все секторы одинаковы - как уже говорилось, их емкость в MS-DOS всегда равна 512 байтам".
Думаю автор не просто так вставил "MS-DOS", как думаете?
← →
Игорь Шевченко © (2004-09-07 11:25) [35]
> Когда диск отформатирован под NTFS, то 13int не работает.
> Почему?
Работает
> если есть кластер?
Кластер есть логическое понятие. Сектор есть физическое понятие.
> Думаю автор не просто так вставил "MS-DOS", как думаете?
Думаю, что или надо спросить у автора или не выдергивать фразу из контекста.
← →
Shiza (2004-09-07 12:44) [36]>Ну вы почитайте документ-то.
С моим знанием английского такие документы читать рановато наверное :), но почитав абзацы 4.21 - 4.23, я встретил такие понятия как "Long Physical Sector" и "Long Logical Sector". Даже с моим знанием английского понятно что это понятия разные, и Physical - есть физический, а Logical - есть логический сектор.
Следовательно физический размер сектора может быть нестандартным (512 байт)... но не утверждаю, а предполагаю...
А вы со мной согласны?
← →
Игорь Шевченко © (2004-09-07 15:45) [37]"В ходе выполнения процедуры так называемого низкоуровневого форматирования (low-level formatting) на носитель записывается информация, которая определяет разметку носителя на цилиндры и секторы. Структура формата включает в себя различную служебную информацию: байты синхронизации, идентификационные заголовки, байты контроля четности и т. д. В современных винчестерах такая информация записывается однократно при изготовлении винчестера. Повреждение этой информации при самостоятельном низкоуровневом форматировании пользователем чревато полной неработоспособностью диска и необходимостью восстановления этой информации в заводских условиях"
http://www.athena.vvsu.ru/glax/disk/hdd.HTML
Желающие изменить размер сектора на диске могут проэкспериментировать. У меня лишнего винчестера нету, так что я от экспериментов устраняюсь.
← →
Shiza (2004-09-07 15:53) [38]Полазив по Интеренту, я пришёл к следующему выводу. Размер сектора жёсткого диска может быть больше 512 байт, но изменить его программными средствами нельзя. Размер сектора зависит от жёсткого диска.
← →
Shiza (2004-09-07 16:03) [39]http://www.athena.vvsu.ru/glax/disk/hdd.HTML
от туда же:
"Теперь Вы знаете, что на жестком диске имеются цилиндры, головки и сектора. Все эти параметры для каждого жесткого диска есть в BIOS. Вы знаете также, что размер сектора жесткого диска не фиксирован, как это было раньше.
В настоящее время эти величины используются только для совместимости с DOS, поскольку они не имеют отношения к физической геометрии диска."
Так что, всё-таки можно? :)
← →
Alex Konshin © (2004-09-07 20:05) [40]Не, ну вы точно не читатели.
Там же в документе написано, что можно сделать сектор больше 512, но делается это для того, чтобы прикладные программы могли записать туда некую служебную информацию. Почему я говорю "служебную"? А потому что некоторые команды чтения-записи все равно будут читать-писать 512 байт.
А понятие "кластер" - все-таки физическое. И в документе описано, как он может выглядеть при нестандартном размере сектора.
Этот документ описывает ATA версию 8, т.е. ту, что еще пока не реализуется. Если хотите, можете почитать описания свех остальных версий ATA на том же сайте. Уверен, что по subj там будет то же самое.
← →
Shiza (2004-09-08 12:46) [41]>А понятие "кластер" - все-таки физическое.
Извинте конечно, я не специалист в этом вопросе, но во всех книгах которыя я читал, кластер - "логическое" понятие. Для дисковода нет такого понятия как кластер. Дисковод работает с цилиндрами, головками, дорожками, секторами, но не с кластерами.
Итак, размер сектора может быть больше 512 байт. А как же его такого-этакого изменить программными средствами? Я почему-то склонен думать что нельзя, но..."что скажет стая?"
И ещё. Господа, обсуждение почему-то не очень активное. Я думаю это всё-таки из-за того, что некоторым людям легче сказать нельзя, чем покопаться в интернете, книгах или в голове.
← →
Alex Konshin © (2004-09-08 20:53) [42]Как раз-таки дисковод IMHO работает именно с кластерами, точнее с тем, что в Windows называется кластером. Не, я допускаю, что я могу заблуждаться, но мне кажется, что "длинные сектора" и есть кластеры. Там есть два их варианта, и в обном из них контрольные сумма одна на весь "длинный сектор". Ну чем не кластер? Можно, конечно, покопаться и узнать это, но лень... Кому кроме тебя это надо? :)
И ещё. Господа, обсуждение почему-то не очень активное. Я думаю это всё-таки из-за того, что некоторым людям легче сказать нельзя, чем покопаться в интернете, книгах или в голове.
Так ты документ-то все-таки прочти. Это ж на самом деле и есть самая правда, это описание стандарта ATA, все остальное - выдумки писателей.
← →
Игорь Шевченко © (2004-09-08 21:49) [43]Alex Konshin © (08.09.04 20:53) [42]
> Как раз-таки дисковод IMHO работает именно с кластерами,
> точнее с тем, что в Windows называется кластером.
Секторы - аппаратно адресуемые блоки носителя.
Кластеры - адресуемые блоки, используемые многими файловыми системами. Размер кластера всегда кратен размеру сектора. файловая система использует кластеры для более эффективного управления дисковым пространством: кластеры, размер которых превышает размер сектора, позволяют разбить диск на блоки меньшей длины - управлять такими блоками легче, чем секторами.
Соломон, Руссинович: "Внутреннее устройство Windows 2000", глава "Файловые системы".
Так что в Windows кластер - это логическое понятие файловой системы.
За документ большое спасибо, обязательно прочитаю, только вот я сразу в этих 366 страницах запутался и не нашел ответа про размер сектора :)
← →
Alex Konshin © (2004-09-08 23:34) [44]Кластеры - адресуемые блоки, используемые многими файловыми системами. Размер кластера всегда кратен размеру сектора. файловая система использует кластеры для более эффективного управления дисковым пространством: кластеры, размер которых превышает размер сектора, позволяют разбить диск на блоки меньшей длины - управлять такими блоками легче, чем секторами.
Соломон, Руссинович: "Внутреннее устройство Windows 2000", глава "Файловые системы".
Так что в Windows кластер - это логическое понятие файловой системы.
Так вот судя по документу "длинные сектора" это несколько секторов по 512 объединенных в одну физическую запись, в одном из вариантов даже с одной контрольной суммой на все сектора. То есть, если бы я был разработчиком Windows, так я бы эти самые кластеры реализовывал именно как "длинные сектора", а иначе какой из них толк?
За документ большое спасибо, обязательно прочитаю, только вот я сразу в этих 366 страницах запутался и не нашел ответа про размер сектора :)
Ну я тоже его через строчку читал, я все-таки не такой уж гуру в этом - мне это никогда не было нужно. Но я же привел номера разделов, где об этом говорится. Возможно, что там еще что-то по этому поводу есть, но это первое, что попалось на глаза.
← →
Anatoly Podgoretsky © (2004-09-08 23:59) [45]Alex Konshin © (08.09.04 23:34) [44]
Толк от них идет с СРМ, в ней был всего выделен всего один байт под количество секторов, а как только размеры дискет подросли, то им ничего не осталось, как сделать блоки из секторов (кластеры). А если учесть, что DOS 1.0 это CPM, то понятно откуда там кластеры, хоть потом и было FAT12
То есть единственная пользы, это меньшее количество блоков в таблице размещения файлов, сама работа усложняется, а место не рационально используется.
← →
Anatoly Podgoretsky © (2004-09-09 00:07) [46]Alex Konshin © (08.09.04 20:53) [42]
Нет, есть два варианта работы
1. с секторами, адресуются доржка, головка, сектор (эмулируется, а на старых винчестерах и гибких дисках физически)
2. родной, абсолютные адреса (LBA)
И еще по размерам секторов, наиболее распространены три размера
128 байт, в основном в рам дисках
512 байт, исторически сложилось так у ИБМ, хотя стандартные контролеры поддерживают 128, 256, 512 и 1024 (не могу сказать про современные винчестеры, хотя там говорить о реальном размере сектора и количестве дорожек можно только гадая) и это не относится к остальным не родным файловым системам.
2048 CDFS
← →
Anatoly Podgoretsky © (2004-09-09 00:09) [47]В дополнение, размер сектора в 512 байт на дискетах появился не сразу, вроде на 3.5 дюйма или на 360 кб, сейчас не помню, но дискеты малой емкость имели в основном 128 байт.
← →
Dimaxx (2004-09-09 00:11) [48]2 Shiza:
>Интересно, зачем это системе логический сектор, если есть кластер?
Ответ на этот вопрос ищи в ответе на другой вопрос: "А зачем в Линухе используется своя файловая система?" Да потому что кластерный метод запатентован Мелкософтом и за его использование нужно платить немалое бабло! Или я неправ? А Линухам надо было уйти от использования мелкософтовских разработок.
← →
Игорь Шевченко © (2004-09-09 00:29) [49]Alex Konshin © (08.09.04 23:34) [44]
Я увидел в примере про Long Sectors вариант с 524-байтными секторами и фразы:
"The purpose of the long logical sector feature set is to allow additional data words per sector for server
applications. Sectors with 520 or 528 bytes are typical."
"Devices that implement the Long Logical Sector Feature set are not backward compatible with applications
that use 256 word logical sectors, e.g. desktop and laptop system."
То есть, физически можно разметить так, что сектор, адресуемый по LBA имеет размер больше, чем 512 байт.
А кстати, что есть packet и non-packet device ? :)
← →
Cobalt © (2004-09-09 00:45) [50]2 Dimaxx (09.09.04 00:11) [48]
" - Какая-то у тебя, дядя Фёдор, колбаса неправильная" ;)
Сомневаюсь, что тут именно патент от MS как-то повлиял :)
файловая система MSDOS не поддерживала права доступа к файлам, потому её и не использовали в Линукс как "родную". А он появился ещё до появления NTFS, поэтому её тоже не использовал. а решил пойти своим путём
← →
Shiza (2004-09-09 10:33) [51]>Кому кроме тебя это надо? :)
"Я хотел помочь людям!" (цитата из мультфилма "Прометей")
Мы немного отклонились от темы. У кого-нибудь есть идеи (в виде строк кода) как изменить размер сектора? Или мы ещё рассуждаем можно его изменить или нет?
И ещё. Коль мы затронули тему АТА, то не лишим будет напомнить, что к винчестеру можно обращатся двумя путями: через 13int (сектор, головка, цилиндр), или как в случае с АТА через порты ввода-вывода (LBA). В каком русле будем плыть дальше?
← →
Игорь Шевченко © (2004-09-09 10:38) [52]
> что к винчестеру можно обращатся двумя путями: через 13int
> (сектор, головка, цилиндр)
А BIOS как по-твоему обращается ? Тоже через порты.
← →
Alex Konshin © (2004-09-09 10:55) [53]И ещё. Коль мы затронули тему АТА, то не лишим будет напомнить, что к винчестеру можно обращатся двумя путями: через 13int (сектор, головка, цилиндр), или как в случае с АТА через порты ввода-вывода (LBA). В каком русле будем плыть дальше?
Первый путь все равно идет через второй. И все равно не ясно, как Windows отнесется к такому сектору, если она его случайно найдет.
Честно говоря, я не знаю, как винчестер обычно отформатирован и как Windows его читает-пишет. Судя по документу, если используются команды DMA, то сектора будут читаться целиком. И что будет, если размер буфера (512) окажется недостаточным? Как Windows отнесется к такой ошибке? Если же используются команды READ/WRITE BUFFER, то всегда будет читаться 512 байт (опять-таки если верить документу). Но все равно я бы на это закладываться не стал бы. Что будет, если диск начнут дефрагментировать? Если же хочется создать свой не Windows раздел с нестандартными секторами и своими драйверами доступа, то тогда вопросов нет - флаг тебе в руки.
И какой именно размер сектора тебе нужен? О чем хоть разговор?
И, собственно, зачем? Может есть более простое решение?
← →
Игорь Шевченко © (2004-09-09 12:36) [54]Alex Konshin © (09.09.04 10:55) [53]
> И, собственно, зачем? Может есть более простое решение?
Зачем - я могу попробовать догадаться, скорее всего, защита от несанкционированного копирования :)
← →
Shiza (2004-09-09 14:23) [55]>А BIOS как по-твоему обращается? Тоже через порты.
Да наверное к любому устройству обращаются через порты, но я не о том. Мы как будем обращаться, с помощью ассемблеровских in-out, или через DeviceIOControl?
>И все равно не ясно, как Windows отнесется к такому сектору, если она его случайно найдет.
Почему же не ясно? Она будет считать его сбойным.
>И какой именно размер сектора тебе нужен? О чем хоть разговор?
>И, собственно, зачем? Может есть более простое решение?
Да помоему некоторые уже забыли вопрос на который мы ищем ответ. :) Вопрос в самом начале форума.
← →
Shiza (2004-09-09 14:26) [56]>Зачем - я могу попробовать догадаться, скорее всего, защита от несанкционированного копирования :)
Я не знаю зачем это нужно автору вопроса, но мне это интересно.
А насчёт защиты, то это помоему не самый эффективный способ...
← →
Alex Konshin © (2004-09-09 19:37) [57]Да наверное к любому устройству обращаются через порты, но я не о том. Мы как будем обращаться, с помощью ассемблеровских in-out, или через DeviceIOControl?
Вот сначала нужно понять, чего хотим, а потом уже способы искать.
Под NT+ в порты не попишешь и DeviceIOControl не всегда поможет.
Да помоему некоторые уже забыли вопрос на который мы ищем ответ. :) Вопрос в самом начале форума.
В вопросе не говорится о конкретном размере. Более-менее ясно, что нельзя сделать сектор меньше 512. Ясно, что теоретически можно сделать его чуть больше 512 или объеденить несколько секторов в длинный. Вот и вопрос: чего хотим и зачем?
← →
Shiza (2004-09-10 10:15) [58]>Под NT+ в порты не попишешь
Да ну почему не попишешь? Можно и под NT писать и читать порты, просто делается это немного сложнее, чем обычные in-out.
>Вот и вопрос: чего хотим и зачем?
Ладно, хоть я и не автор вопроса, но очень хочеться разобраться. Чего хотим? Размер сектора нужен или 524 байт, или 1024, любой, только бы код был рабочий.
← →
Shiza (2004-09-15 17:14) [59]А вот ответ тишина :)
← →
Alex Konshin © (2004-09-15 20:12) [60]Дык, а кому это нужно?
В порты напрямую не попишешь. Можно что-то сделать через SPTI или miniport, но IMHO этого все равно будет недостаточно. А уж возиться в выходом в 0 кольцо и т.п. хакерские выходки - извольте сами.
← →
Shiza (2004-09-16 16:09) [61]>В порты напрямую не попишешь.
Да ну блин, ну почему не попишешь??? Можно. И в Win9X, и в WinNT.
>А уж возиться в выходом в 0 кольцо и т.п. хакерские выходки - извольте сами.
Во-первых выход в 0 кольцо не нужен наверное, а во-вторых - я бы назвал это не "хакерские выходки", а низкоуровневое программирование.
>Дык, а кому это нужно?
"Если звёзды зажигают, значит это кому нибудь нужно" (с)
← →
Alex Konshin © (2004-09-16 20:44) [62]В NT? В порты контроллера IDE? Ну-ну.
Флаг тебе в руки.
← →
Shiza (2004-09-17 10:41) [63]>Флаг тебе в руки.
Не груби.
>В порты контроллера IDE?
Я разве сказал в порты контроллера IDE? Я читал и писал в порты в NT, но с портами контроллера IDE не работал. Но логика подсказывает, что если можно писать в порт по адресу $0070, то можно писать и в порт с другим адресом.
Может поправишь?
← →
Игорь Шевченко © (2004-09-17 10:45) [64]
> но с портами контроллера IDE не работал.
А попробуй поработать. Практика - критерий истины.
← →
Shiza (2004-09-17 12:54) [65]>А попробуй поработать. Практика - критерий истины.
Я бы попробовал, только у меня не IDE контроллер, а SCSI. Да и потом, кто сказал что мы работаем именно в NT?
← →
Игорь Шевченко © (2004-09-17 13:21) [66]Shiza (17.09.04 12:54) [65]
То есть, насколько я понимаю, тебе важен именно процесс обсуждения, а не результат ?
И какая разница в данном случае, IDE или SCSI ?
← →
Shiza (2004-09-17 17:20) [67]>То есть, насколько я понимаю, тебе важен именно процесс обсуждения, а не результат?
Зря иронизируете. Вы знаете, Игорь, мне на самом деле важен результат: (Shiza (10.09.04 10:15) [58] "...только бы код был рабочий.")
>И какая разница в данном случае, IDE или SCSI?
Я знаю адреса портов для общения с IDE и не знаю, совпадают ли они для SCSI. Да и потом, для SCSI существует ASPI...
← →
Игорь Шевченко © (2004-09-17 17:38) [68]
> Вы знаете, Игорь, мне на самом деле важен результат
Тут Алекс Коншин спрашивал: а зачем ?
Я присоединяюсь к этому вопросу.
← →
Alex Konshin © (2004-09-18 07:07) [69]Shiza (17.09.04 10:41) [63]
>Флаг тебе в руки.
Не груби.
Это кто грубит?
Тебе ответили: тебе нужно - ты и экспериментируй. Мне это неинтересно и пользы от этого я не вижу. Если объяснишь зачем это может быть нужно людям, то тогда и посмотрим, стоит ли заморачиваться.
В регистры IDE под NT ты точно не попишешь. По крайне мере без хакерских штучек.
И на SCSI будут проблемы: ASPI есть не везде и не всегда. MS его не поддерживает, Adaptec свой ASPI убрал, а потом и сам исчез. Другие производители тоже далеко не всегда драйвер ASPI предоставляют. Можно работать через SPTI, но там нужны права админа.
← →
Shiza (2004-09-20 10:52) [70]>Мне это неинтересно и пользы от этого я не вижу.
Если не интересно, зачем надо было в форум заходить? Сказать: "Я не могу, значит и вы не сумеете."?
Для большинства программистов, которые используют Дельфи, почему-то вопросы низкоуровневого программирования кажутся какими-то запретными. В форумах не обсуждать! С БИОСом работать нельзя, с диском напрямую - ни-ни! А если один программист напишет программу на Дельфи, которая читает Linux-разделы, то проэто никто как-будто и не слышал... Дальше WinAPI не пускают! "Не ходите дети в Африку гулять" (с) :)
>Тут Алекс Коншин спрашивал: а зачем ?
Я могу ошибаться, но по-моему в форум в осовном заходят чтобы задать вопрос, и получить ответ, а не для того, чтобы у них спросили: "А зачем?". Обсуждать давайте как сделать, а не то, зачем это сделать... Если ответ на вопрос не знаете - не отвечайте... Есть предположения как сделать - милости просим :)
← →
Shiza (2004-09-22 10:25) [71]И тишина... :)
Страницы: 1 2 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];
Память: 0.69 MB
Время: 0.036 c