Прямой доступ к диску - ПОДСКАЖИТЕ, pls!!!
Нужно из-под WinXP прочитать некоторое содержимое на диске (не в файле, FAT'а вообще нет). Насколько я понимаю, для такого "посекторного" чтения нужно пользоваться прямым доступом к диску. Но, к сожалению, никаких толковых примеров/описаний/исходников, о том, как это делать, я не нашёл. Помогите, пожалуйста! (И если сможете - поскорее - очень нужно)
Заранее благодарен,
comp3v.
З.Ы. Если это можно реализовать не только на ассемблере, то было бы желательно получить вариант решения на C++ (я пишу в CBuilder'e)
З.З.Ы. Извините, что пощу в две темы - не знаю, где помогут.
CreateFile("\\\\.\\A:", GENERIC_READ, FILE_SHARE_READ+FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
после этого можно просто читать функцией ReadFile. В NT точно работает, но в XP - не знаю.
1. CreateFile хороша, но похоже только для дискет формаченных под Windows или работает только с секторами 512 байт. Возможно, что весь winapi работает только с секторами этого размера, потому как я еще я использовал прогу HEXWorkShop, и умня ничег о не получилось, а она(эта прога) использует тот же самый winapi.
2. Похоже ничего не отстается как только прибегнуть к низкоуровневому программингу
вот ссылка:http://datarecovery.ru/books/bsp/v01b/
Для этого как мне видеться надо весь код, что есть в тексте, немного покоректить,если и его выполнение возможно как я понимаю только под win9x.
сам еще не пробовал, но похоже - это единственный путь. Если, что получиться напиши плз на [email]malyshev_d@mail.ru[/email]
Я считываю инфу о диске неизвестного формата
при помощи функции DirectIOControl и тут все
ок ... эта функция говорит, что мол формат
сектора 512 байт , то есть такой же как у
виндозы .. но только вот прочитать при помощи
ReadFile не удается .. в чем тут могет быть
дело ? Если не секрет , ответьте плз.
Да и еще ... на счет низкоуровнего программинга
самого контроллера НМГД ... у мня есть инфа
и куски кода на асме для контроллеров 8772A
Intel ... но эта инфа 1991 года давности, и
насколько сейчас эти контроллеры в
современныхматерях изменились, мне в Инете
разузнать не удалось. Может кто-нить ведает?
Киньте линки или еще какую нить инфу, плз.
А на счет драйверов ... сам я не знаю как
пишуться такие sys или vxd ... но совсем недавно
держал в руках такие, которые позволяли бы
прямой доступ к портам под НТ, их только в /systems32/drivers/ кидаешь а дальше в С все как под досом или win9x при помощи inp и outp... да вот только опять таки в Инете разыскать их мне не удалось ... может кто знает где их freeware найти... заранее THANX
Прошу прощения за возможные причиненные неудобства создателя threadа ... просто уж очень проблема близка , а заводить еще один :(( не хоца
драйвера доступ только под adiministrator. :(
Но все равно меньше гемора, чем то что
я видел альтернативного ... сам драйвер
потом к нему еще какой нить api в виде dll.
а тут все просто скинул в папку, и юзай
привычные функции.
могу если надо ссылку выслать или сам драйвер
UserPort.sys называется ... У мня теперь
траблы в следующем :
у мня есть код на асме для считывания секторов
с диска при использовании прямого доступа к портам контроллера НГМД, мне бы его адаптировать
во вставки C++ для VC 6.0.
Не мог бы ты помочь. Исходники могу выслать.
Они не большие. Но что то не так. Мне просто
сложно на асме сам никогда не писал, пойми че там надо , а опытный глаз может быть сразу бы понял в чем там дело. Короче прога у мня не компилиться как надо .
А за то что уcпокоил на счет совместимости контроллеров большой THANX аnd REGARDS.
DDK у мня есть только вот времени и знаний пока
для разработки драйверов нет. Если бы подсказали вкратце как это делается, то был бы очень рад.
http://www.codenet.ru/progr/dos/int_0012.php
Да инфа полезная , но только вот я читал,
что при помощи int 13h нельзя считывать сектора,
произвольного формата (128, 256) байт, т.к.
мол все функции его (13h) настроены на длину
сектора 512 байт, что мне не годиться ... надо
бы читать с произвольной длиной сектора.
Функции чтения секторов лучше разместить в DLL, а из C++ их всего лишь вызывать, и никиких вставок делать не нужно. Такой метод хорош при чтении с дискеты, потому что порты 03F2 - 03F5 не закрываются Windows. А порты для работы с IDE-винтами обычно закрыты, чтобы пользователь не мог перезаписать MBR, поэтому и надо драйвера писать, чтобы к винтам был полный доступ. Код для чтения секторов на асме можешь выслать сюда - (dtdcs@mail.ru), а проект VC++6 можешь не высылать, т.к. он у меня не стоит - пользуюсь Borland C++5.
win 9x может быть и не закрывает, а вот NT да.
Но я уже справился с этой проблемой... я уже писал, что нашел драйвера для разрешения полного
доступа к портам под нт.
Вот интересно, где же ты видел дискету с сектором не 512 байт? Хотел бы на неё посмотреть. На всех дискетах, винтах и даже флэш-картах размер сектора - 512, и только на CD дисках он 2048. Так что если надо читать с CD, надо сделать отдельную функцию, т.к. работа с ATAPI(всё же он самый распространённый) не имеет ничего общего с чтением секторов с жёсткого диска и дискеты.
Я вот посмотрел на эти исходники, и ...
Вот интересно, где же ты видел дискету с сектором не 512 байт? Хотел бы на неё посмотреть. На всех дискетах, винтах и даже флэш-картах размер сектора - 512, и только на CD дисках он 2048. Так что если надо читать с CD, надо сделать отдельную функцию, т.к. работа с ATAPI(всё же он самый распространённый) не имеет ничего общего с чтением секторов с жёсткого диска и дискеты.
НУ вот пришла пора все рассказать сначала.
Ты не злись я не умничаю ... просто у мня есть предположение.
Короче у мня есть диск на 5,25 и на нем есть
всякая всячина, которую мне надо бы считать(все сектора от 0 и до конца).
Да только вот при помощи высокоуровневых функций
типа ReadFile она не читается.
Формат дискеты мне неизвестен. Известно только
что кластер в этой системе(очень древняя и заточена под определенное оборудование MILOS), в которой используются эти дискеты 512 байт, а сколько в кластере неизвестно. Вот я и предположил, что если дискета не читается функциями, которые читают 512 байтовые сектора,
то возможно там сектор имеет меньшую длину.
Если ты видешь какие либо другиие причины, почему могут не читаться дискеты .. плз назови мне их.
У мня есть подозрение, что их может быть больше ... но тогда мне прийдется излить порядком больше воды, чем я тут налил ... модераторы и так наверное уже не рады :(
У тебя аська есть ? Может пришлешь номер .
Так было бы удобнее и быстрее. Понятно, что
тебе от этого выгоды мало, и экспа 0.
Но только вот я не знаю как быть и все.
Я вот посмотрел на эти исходники, и ...
Что кстати на чсет исходников ... что совсем
с ними все плохо или как?
Да нет, просто я никогда не видел дискет с секторами не 512 байт, и не видел, чтобы под Windows DMA использовали. Ведь откуда ты знаешь, что храниться в памяти <1Mb? Может там каталоги страниц, GDT, или ещё что-нибудь? Так вот, для чтения не надо DMA включать, лучше через rep insb.
Слушай я не секу что такое GDT или rep insb...
я просто честно содрал исходники откуда я сказал
вот и все и старался их приспособить для себя.
Теперь я понял что доступ к портам DMA для мня
под виндой закрыт и обдумываю как бы сделать все под досом, вот и все ...