Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Вниз

загрузочный сетор...   Найти похожие ветки 

 
Aga   (2003-05-17 10:29) [0]

Возможно ли с помощью Делфи записать в сабж что-то своё??


 
Ihor Osov'yak   (2003-05-17 10:44) [1]

Можно. Но здесь принято про это не спрашивать. Технология двойственного назначения. Я в свое время за это по ушам получал. Не за вопросы :-)


 
y-soft   (2003-05-17 11:36) [2]

Ничего особо сложного здесь нет. Windows не запрещает доступ к физическим дискам на низком уровне. Достаточно внимательно поискать в MSDN, да и в интернете есть примеры - при желании найдете. Но подробно рассказывать здесь и давать ссылки по вышеуказанным причинам (Ihor Osov"yak © (17.05.03 10:44)) вряд ли кто-то будет.


 
aga   (2003-05-17 17:46) [3]

Жаль... а ведь нужно. Инет перерыл и нашел токо на асме и немогу в Дельфю засунуть...


 
Nick Denry   (2003-05-17 19:24) [4]

Если нашел на асме, попытайся оптимизировать под встроенный асм дельфи.
а тема действительно двойственная.


 
Плохой человек   (2003-05-17 19:46) [5]

> Можно. Но здесь принято про это не спрашивать. Технология двойственного назначения.

Да вы что? Какого? Быстро давайте ссылки, кто вас наругает и за что???


 
Snap   (2003-05-17 20:02) [6]

>Можно. Но здесь принято про это не спрашивать.
Да я бы так не сказал. Такой вопрос появляется здесь с переодичностью раз в неделю, и чаше всего на него дают ответ.

2Aga на торри есть очень хорошие компоненты для работы с диском на основе драйвера.


 
Ihor Osov'yak   (2003-05-17 20:17) [7]

драйвер нужен только для w9x (и то, это один из возможных вариантов); для nt+ обходимся стандартными средствами. В том же msdn куча примеров. Компонент, приведенный на тори имеет несколько мелких глюков, но в перврм приближении может быть использован. Глюки, которые мне известны (дело было давно, примерно года полтора, может уже исправлено, но все же обратите внимание):
- несколько разная индексация дисков для nt/w9x (под одним и тем же номером в nt и 98 понимаются разные диски)
- для w9x попытка записать/прочитать более 4 секторов будет неуспешной..

Может быть использован как прототип для подготовки нормально работающего компонента..





 
SPeller   (2003-05-18 07:24) [8]

В документации в ф-ции CreateFile как-то прочитал, что она может открывать не только файлы, порты и различные объекты, но и физические и логические диски. Сам не пробовал, поэтому хочу спросить, даёт ли она доступ к загрузочному сектору?


 
Ihor Osov'yak   (2003-05-18 12:40) [9]

2 SPeller © (18.05.03 07:24)
Ну, млин, молодеж пошла...

Неужто сложно запустить делфи, набрать в редакторе CreateFile, выделить, и нажать Ctrl_F1.. И почитать 2 минуты..

... Это даже не в msdn смотреть..


 
SPeller   (2003-05-18 14:15) [10]


> Ihor Osov"yak © (18.05.03 12:40)
> 2 SPeller © (18.05.03 07:24)
> Ну, млин, молодеж пошла...
>
> Неужто сложно запустить делфи, набрать в редакторе CreateFile,
> выделить, и нажать Ctrl_F1..

Во-первых, запускать Дельфи не обязательно. Главное меню - Программы - Borland Delphi 6 - Help - MS SDK Files - Win32 SDK Reference. :)
Во-вторых, в хелпе написано так: You can use the CreateFile function to open a disk drive or a partition on a disk drive. The function returns a handle to the disk device; that handle can be used with the DeviceIOControl function. ВСЁ. Ни слова о загрузочном секторе. DeviceIOControl может возвращать макимум только информацию о разделе диска да открывать лоток CD-рома. Поэтому, собственно, я и спрашивал.

ЗЫ: И не надо на молодёжь пинять.


 
Nick Denry   (2003-05-18 14:18) [11]

2>
> SPeller ©


> ЗЫ: И не надо на молодёжь пинять.

Точно!


 
Ihor Osov'yak   (2003-05-18 15:25) [12]

2 SPeller © (18.05.03 14:15)

> You can use the CreateFile function to open a disk drive or a partition on

Осталось еще учебник взять и посмотреть, что значит "a disk drive", или прочитать следующих 10 строчек хелпа....

2 Nick Denry © (18.05.03 14:18)

Есть подозрение, что есть за что..


 
Ihor Osov'yak   (2003-05-18 15:29) [13]

> Ни слова о загрузочном секторе

Ну нужно иногда соображаловку включать.. Или задаться вопросом, где, собственно, этот загрузочный сектор расположен...

Подсказка - они есть двух типов. В терминологии немного путаницы, но можно сказать так - внесистемный и загрузочный сектор операционной системы.. Так что для начала определитесь, какой вам нужно..


 
DrPass   (2003-05-18 15:45) [14]


> Во-первых, запускать Дельфи не обязательно. Главное меню
> - Программы - Borland Delphi 6 - Help - MS SDK Files -
> Win32 SDK Reference. :)

Можно подумать, Ihor Osov"yak этого не знает.

> You can use the CreateFile function to open a disk drive
> or a partition on a disk drive. The function returns a handle
> to the disk device; that handle can be used with the DeviceIOControl
> function

А если посмотреть в том же хелпе чуть ниже, там все дословно и с примерами описано - как открывать диски или разделы.

А еще DeviceIOControl может, например, залочить том для монопольного доступа...
И молодежь нынче не очень...
И пенять пишется через "е"...


 
SPeller   (2003-05-18 20:15) [15]

Ну ладо вам.... Ну не работал я ниразу с этим, поэтому точно и не знал, поэтому и спросил. Винды любят прикрывать доступ к важным объектам.


> И молодежь нынче не очень...

Молодёжь другая, не та что раньще: наглая, самодовольная, беспардонная, ленивая и безответственная. Пьёт и курит. Вобщем, ужас полный. Поотстреливать бы таких, да не получится :)


 
Shiza   (2003-05-19 11:22) [16]

Ребята, Я как специалист в этом вопросе, могу ответить что доступ к загрузочному сектору осуществляется так просто, что об этом и нечего разводить такую длинную беседу. Я мог бы выложить исходник прямо здесь, но боюсь админ уберёт моё сообщение из форума, поэтому пишите на мыло если кого-то это интересует.


 
Ihor Osov'yak   (2003-05-19 11:42) [17]

2 Shiza © (19.05.03 11:22)

См. http://delphimaster.net/view/7-1053198147/ , в часности (19.05.03 11:29)

Специалисту в этом вопросе следовало бы знать, что загрузочные сектора бывают системные и внесистемные. А также, что использование 21h, func 7305h, int 21h, func 7305h зерез VWIN32DIOC работает только для логических томов, а исп. int13 для w9x из win32 успешно только для флоппи-дисков...


.. А никто не говорил, что это сложная задача. MSDN читать вниматильно нужно (для win9x, для NT даже в delphi по f1 можно получить исчерпывающую информацию)..



 
Shiza   (2003-05-19 12:29) [18]

Загрузочный сектор записан на винчестере. Он начинается с N-ного байта. Его можно прочитать не только int 21h, но и int 25h, просто прочитать эти байты без всяких функций. А насчёт int 13h ты неправ, оно работает с диском на физическом уровне, и ему пофиг какое оно флоппи или нет.


 
Ihor Osov'yak   (2003-05-19 12:56) [19]

2 Shiza © (19.05.03 12:29)

Большая просьба прочитать нулевой физический сектор (ну тот, где первых четыре вхождения партишн тейбл) с помощью int21, 25. OS - на выбор. Относительно Int13. Просьба привести рабочий фрагмент (желательно убедится в его работоспособности самому) вызова int13 для доступа к физическим секторам из win32 для win95 ocr2 и старше (линейка w9x)...

Также просьба разобраться в термине "загрузочный сектор".




 
Shiza   (2003-05-19 16:01) [20]

Пишем на нажатие кнопки

procedure TForm1.Button1Click(Sender: TObject);
var
f:PFSBR;
begin
if Floppy1.ReadFloppyFSBR(3,f) then Form1.Caption:="OK";
memo1.Lines.Add(floattostr(f.BPB.NumberOfFATs));
end;

Если ты специалист, то знаешь, что есть такое понятие как блок параметров БИОС. Из него можно получить некоторую инфу. Например количество копий ФАТ, обычно - 2 копии. Вышеуказанный код это и делает.

Компонент ТFloppy входит в комплект с компонентом ТDiskAcces, который я только что выложил.



 
Ihor Osov'yak   (2003-05-19 16:18) [21]

2 Shiza ©

Тебе же русским языком говорили и несколько раз - доступ к любому сектору HDD. А в части int13 для win9x, win32 - работает только для флопи, а не HDD - см. (19.05.03 11:42)..

Еще внимательно почитай - (19.05.03 12:56). Несколько раз, пока смысл не уловишь.







 
aga   (2003-05-19 17:14) [22]

НАдо же я и недумал что будет так много ответов, щас перечитаю...


 
aga   (2003-05-19 17:26) [23]

хм.. вот почитал я всё это и неочень мне легче стало...
Я думал что такой вопрос для настоящих Мастеров очень простой но я ошибался...


 
Ihor Osov'yak   (2003-05-19 17:35) [24]

2 aga © (19.05.03 17:26)

Для тех, кто на танке - повторяю:

см.
y-soft © (17.05.03 11:36)
Ihor Osov"yak © (17.05.03 20:17)
DrPass © (18.05.03 15:45)





 
aga   (2003-05-19 17:40) [25]

2Ihor Osov"yak
>>Для тех, кто на танке - повторяю:
а чего это ты вдуг для себя повторяешь??

вообще если человек знает он не посылает искать где-то там, а дает пример! делай вывод


 
Ihor Osov'yak   (2003-05-19 17:51) [26]

2 aga © (19.05.03 17:40)

Работающий пример двойственных технологий принято давать после личной просьбы и после обьяснения зачем это надо.. Но я наверное тебе уже не дам..


 
aga   (2003-05-19 17:59) [27]

2Ihor Osov"yak
чё ты воду мутишь! признаяся наконец что ты незнаешь и всё!


 
Игорь Шевченко   (2003-05-19 18:01) [28]

aga © (19.05.03 17:40)

http://ln.com.ua/~openxs/articles/smart-questions-ru.html

Читай наизусть до полного просветления.


 
AlexRush   (2003-05-19 20:14) [29]

Игорь Шевченко © (19.05.03 18:01) >> :)))))))

>> Aga © (17.05.03 10:29) >>
А читать MSDN рекомендую в таком порядке
CreateFile
DeviceIoControl
Device Input and Output Control Codes
Calling DeviceIoControl on Windows NT/2000


 
Vlad Oshin   (2003-05-19 20:33) [30]


можть стоит дать Мастера Ihor Osov"yak у?



 
Ihor Osov'yak   (2003-05-19 20:57) [31]

2 Vlad Oshin

Я оценил Ваше чувство юмора. Ну язва я, язва. Когда доведут..


 
Shiza   (2003-05-20 10:32) [32]

>>Тебе же русским языком говорили и несколько раз - доступ к любому сектору HDD. А в части int13 для win9x, win32 - работает только для флопи, а не HDD - см. (19.05.03 11:42)..

Еще внимательно почитай - (19.05.03 12:56). Несколько раз, пока смысл не уловишь.

Объясняю Блок Параметров БИОС начинается с 12 байта на самой (внешней) НУЛЕВОЙ ДОРОЖКЕ HDD. Мой кусок кода читает именно HDD.
А насчёт 13 прерывания повторяю что это прерывание БИОС а не ДОС и БИОСу пофиг какой диск. Насчёт рабочего примера, скоро будет.


 
Ihor Osov'yak   (2003-05-20 12:17) [33]

> скоро будет.

Вот и об этом спич. Может будет, а может и нет. И после этого поймешь, что работа с int в win32 производится несколько по иному, чем в дос..

... Че читает твой кусок кода - мне не интересно (обьяснение почему - см. в конце моего поста) .
Во вторых, речь велась о чтении сектора, а не о получении BPB.

Еще. Если бы горячий молодой человек немного почитал документацию, то он бы заметил, что BPB имеет отношение к системному загрузочному сектору. Подсказка - системный загрузочный сектор расположен на нулевом секторе тома, но никак не на нулевом физическом секторе физического диска. Я уже несколько раз пытался привлечь внимание на существование такой вещи, как внесистемный загрузчик. В оригинальной терминологии от MS - Master Boot Record. К которому BPB никакого отношения не имеет.

Еще. Если бы молодой человек читал-бы документацию, то он может бы заметил, что BPB имеет несколько разную структуру для разных файловых систем. Но основной прикол в том, что в тех версиях, где в BPB существует упоминание о количестве копий fat, то везде это число идет как word. То есть,

memo1.Lines.Add( floattostr(f.BPB.NumberOfFATs));

вызывает во первых некоторое удивление, а во вторых - убивает напрочь желание анализировать остальной код, даже если бы он был доступен.



И напоследок. Для чтения и записи любого физического сектора в win32 на платформе w9x без прослойки в виде vxd или 16-битного кода не обойтись. На что также была сделана попытка привлечь внимание молодых, горячих парней. Но видимо я только зря потерял время.



 
Shiza   (2003-05-20 13:20) [34]

Итак по порядку.
>> речь велась о чтении сектора, а не о получении BPB.

повторяю BPB записано на HDD начиная с 12 байта нулевого сектора, понимаешь сектора.

>>Подсказка - системный загрузочный сектор расположен на нулевом секторе тома, но никак не на нулевом физическом секторе физического диска.

Внимательней читайте документацию. Таблица описателей разделов (томов) диска следует после BPB, который в свою очередь распологается на нулевой дорожке жесткого диска.

>>memo1.Lines.Add(floattostr(f.BPB.NumberOfFATs));
вызывает во первых некоторое удивление

У меня есть другая функция для перевода WORD в STRING, но floattostr переводит правильно значение $0002. Поэтому не удивляйся.

>>Для чтения и записи любого физического сектора в win32 на платформе w9x без прослойки в виде vxd или 16-битного кода не обойтись.

Я конечно извиняюсь, а VWIN32.VXD это что не VXD (пусть даже виртуальный). Так что читай личше документацию.


 
Ihor Osov'yak   (2003-05-20 13:35) [35]

2 Shiza © (20.05.03 13:20)

Ты не интересен. Вот когда сделаешь реализацию (свою, а не стянешь какие-то компоненты, в которых до конца не разобрался, тогда разговор и продолжим).

Чтобы тебе спокойнее было - шлю тебе (если мыло у тебя указано правильно) консольную демку, которая читает и распечатывает нулевые секторы каждого физического диска в независимости от того, размечен ли диск, или нет, на какие он партиции разбитый, еты .. И возьми msdn - посмотри, увидишь ли ты там свое BPB..

Да - вопрос на сообразительность - предположим, что у меня все тома под NTFS. Какое количество fat покажет твое изделие в этом случае?





 
Ihor Osov'yak   (2003-05-20 16:11) [36]

Да уж... Не удержался, зашел в кладовку, посмотрел это творенье..

Оригинальный метод разработки. Берем в инете чужой юнит, удаляем воспоминание о авторстве и большинство комментарием, делаем классовую нахлобушку - и, внимание, снова ноу-хау, все глобальные функции из оригинала суем как паблишед методы:


TDiskAccess = class(TComponent)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
function VWIN32DIOC(ControlCode: Integer; Registers: PDIOC_Registers): Boolean;
function WindowsVersion(Major,Minor,Build,Platform: DWord): Boolean;



И автору как-то не в досуг понять, что ему говорилось не единыжды про особенности доступа к физическим секторам физического устройства..


Зы - вот и голова от оригинального юнита, и упоминание авторства -

{------------------------------------------------------------------------------}
{ unit : vwin32 }
{ version : 1.0 }
{ last update: 1999/04/06 }
{ written for: Delphi 3 & 4 }
{ written by : Geir Wikran }
{ e-mail : gwikran@online.no }
{ }







 
Shiza   (2003-05-20 17:20) [37]

Я не коим образом не упомянул что это мой компонент. Юнит и правда был взят с torry.net, о чём я написал когда выложил его первый раз. Но некоторые парни его там не могли отыскать и мне пришлось выложить с исходником. Почему компонент? Объясняю.
Намного удобнее когда пишеш типа ТFloppy1. и выпадает список всех функций, не приходится лазить по юниту в поисках какой нибудь функции. А кстати об авторе юнита. Он его практически содрал со шведского юнита (автора правда не помню).


 
Ihor Osov'yak   (2003-05-20 17:51) [38]

2 Shiza © (20.05.03 17:20)

Автора я указал. Ладно, раслабся. Почитай что я выше писал, там почти все по делу. Если хочешь разобраться, то разберешся. Мою демку получил? С помощью решения, опубликованого тобой, доступа к внесистемному загрузчику получить нельзя. Демка, которую получил ты, это делает. Как я понял, ты работаешь с W9X, найди себе где-то старые добрый досовский diskeditor - посмотри вблизи на внесистемный загрузчик и системный.. Внесистемный загрузчик можно увидить только в режиме доступа к физическому устройству. Сравни с тем, что дает моя демка. То, что ты считаешь нулевым сектором есть не более чем нулевой сектор тома. Том - это с:, d: и тд. Перед томом есть еще несколько секторов внесистемных, на современных винчестерах - как правило - 63.. Вот этих 63 ты с помощью решения этого автора и не увидишь.. О чем постоянно я говорил..


 
Shiza   (2003-05-21 10:58) [39]

Понимаешь в чём дело, я работаю бухгалтером, на программирование мало времени остаётся, поэтому приходится читать книги (как правило старые) по Паскалю и адаптировать всё под Винду. Насчёт системного и внесистемного загрузчика ничего не слышал. Всё что я знаю про физический доступ к диску это книга "Turbo Pascal 7.0 Практика программирования" Фаронов В. В.1997 г. Буду признателен если кинеш пару ссылок про системные загрузчики (можно на мыло).
Прогу твою получил, но ведь эта же информация находится в расширенном BPB, который можно прочитать и без дополнительного vxd. В общем нужно как-то этот вопрос просветить.


 
Ihor Osov'yak   (2003-05-21 11:12) [40]

2 Shiza © (21.05.03 10:58)

Почти исправился, а то пальцы веером - Shiza © (19.05.03 11:22)
> Ребята, Я как специалист в этом вопросе,

Я, кстати, крЕдит от кредИта отличаю, но советы бухгалтерам по бухгалтерским вопросам не даю..

Зы - демка, которую ты получил, читает 512 байт сектора.. Информацию о BPB действительно, можно получить и без всяких там vxd, или как там их, но речь шла о чтении/записи физического сектора, я уже устал это повторять..

Да, еще ..

> Всё что я знаю про физический доступ к диску это книга "Turbo Pascal 7.0 Практика программирования" Фаронов В. В.1997 г. Буду признателен если кинеш пару ссылок про системные загрузчики (можно на мыло).

Доступ к msdn есть? Там подробно все написано.. Линуксоиды любят на эту тему порассуждать.. Если не забуду и встречу в инете на рсском - то брошу.. Также полезно провести некоторое время со старым, добрым diskedit - но желательно поначалу только в режиме чтения..

Зы - в плане чтения.. Есть моменты в биографии, когда на изучение документации уходит больше времени, чем собственно на работу.. А ты - книгу одну почитал ..





Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.011 c
1-26550
alex78
2003-05-28 02:46
2003.06.09
файл массива


7-26797
Islander
2003-03-31 09:04
2003.06.09
Выключить компьютер в XP


1-26476
Егр
2003-05-27 08:10
2003.06.09
Подскажите алгоритм зашифровки и расшифровки текстового файла


14-26737
neuro
2003-05-22 17:52
2003.06.09
STL 4 delphi


1-26527
Flex
2003-05-27 13:21
2003.06.09
TRichEdit Подавление мерцания?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский