Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Прямой доступ к диску - ПОДСКАЖИТЕ, pls!!!

2.6K
22 декабря 2002 года
comp3v
2 / / 22.12.2002
Очень прошу всезнающий All помочь чайнику в следующей ситуации.
Нужно из-под WinXP прочитать некоторое содержимое на диске (не в файле, FAT'а вообще нет). Насколько я понимаю, для такого "посекторного" чтения нужно пользоваться прямым доступом к диску. Но, к сожалению, никаких толковых примеров/описаний/исходников, о том, как это делать, я не нашёл. Помогите, пожалуйста! (И если сможете - поскорее - очень нужно)
Заранее благодарен,
comp3v.

З.Ы. Если это можно реализовать не только на ассемблере, то было бы желательно получить вариант решения на C++ (я пишу в CBuilder'e)

З.З.Ы. Извините, что пощу в две темы - не знаю, где помогут.
424
23 декабря 2002 года
(C)dragon
307 / / 04.12.2002
В этом случае должна работать функция CreateFile:

CreateFile("\\\\.\\A:", GENERIC_READ, FILE_SHARE_READ+FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

после этого можно просто читать функцией ReadFile. В NT точно работает, но в XP - не знаю.
2.1K
03 января 2003 года
OxMDN
17 / / 13.12.2002
Я конечно не всезнающий All, но имею ту же проблему. На сделать имаг всего диска , все равно, какая файловой системы.
1. CreateFile хороша, но похоже только для дискет формаченных под Windows или работает только с секторами 512 байт. Возможно, что весь winapi работает только с секторами этого размера, потому как я еще я использовал прогу HEXWorkShop, и умня ничег о не получилось, а она(эта прога) использует тот же самый winapi.
2. Похоже ничего не отстается как только прибегнуть к низкоуровневому программингу
вот ссылка:http://datarecovery.ru/books/bsp/v01b/
Для этого как мне видеться надо весь код, что есть в тексте, немного покоректить,если и его выполнение возможно как я понимаю только под win9x.
сам еще не пробовал, но похоже - это единственный путь. Если, что получиться напиши плз на [email]malyshev_d@mail.ru[/email]
424
04 января 2003 года
(C)dragon
307 / / 04.12.2002
Если ничего не работает, придёться написать динамический VxD(для Win2k или XP - WDM) и работать с дисками через порты.
2.1K
04 января 2003 года
OxMDN
17 / / 13.12.2002
Можно ли проконсултироваться поболее ..
Я считываю инфу о диске неизвестного формата
при помощи функции DirectIOControl и тут все
ок ... эта функция говорит, что мол формат
сектора 512 байт , то есть такой же как у
виндозы .. но только вот прочитать при помощи
ReadFile не удается .. в чем тут могет быть
дело ? Если не секрет , ответьте плз.

Да и еще ... на счет низкоуровнего программинга
самого контроллера НМГД ... у мня есть инфа
и куски кода на асме для контроллеров 8772A
Intel ... но эта инфа 1991 года давности, и
насколько сейчас эти контроллеры в
современныхматерях изменились, мне в Инете
разузнать не удалось. Может кто-нить ведает?
Киньте линки или еще какую нить инфу, плз.

А на счет драйверов ... сам я не знаю как
пишуться такие sys или vxd ... но совсем недавно
держал в руках такие, которые позволяли бы
прямой доступ к портам под НТ, их только в /systems32/drivers/ кидаешь а дальше в С все как под досом или win9x при помощи inp и outp... да вот только опять таки в Инете разыскать их мне не удалось ... может кто знает где их freeware найти... заранее THANX

Прошу прощения за возможные причиненные неудобства создателя threadа ... просто уж очень проблема близка , а заводить еще один :(( не хоца
2.1K
04 января 2003 года
OxMDN
17 / / 13.12.2002
Sorry чуть не забыл ... правда давали эти
драйвера доступ только под adiministrator. :(

Но все равно меньше гемора, чем то что
я видел альтернативного ... сам драйвер
потом к нему еще какой нить api в виде dll.
а тут все просто скинул в папку, и юзай
привычные функции.
424
04 января 2003 года
(C)dragon
307 / / 04.12.2002
У меня есть инфа только про VxD, а про WDM нет. Чтобы писать эти драйверы, надо будет DDK качнуть. А современные контроллеры винтов и дискет поддерживают все команды 8272, так что можно их использовать. Без админских прав прямого доступа к диску по идее быть не должно.
2.1K
04 января 2003 года
OxMDN
17 / / 13.12.2002
Да все драйвера я для доступа к портам нашел
могу если надо ссылку выслать или сам драйвер
UserPort.sys называется ... У мня теперь
траблы в следующем :
у мня есть код на асме для считывания секторов
с диска при использовании прямого доступа к портам контроллера НГМД, мне бы его адаптировать
во вставки C++ для VC 6.0.
Не мог бы ты помочь. Исходники могу выслать.
Они не большие. Но что то не так. Мне просто
сложно на асме сам никогда не писал, пойми че там надо , а опытный глаз может быть сразу бы понял в чем там дело. Короче прога у мня не компилиться как надо .


А за то что уcпокоил на счет совместимости контроллеров большой THANX аnd REGARDS.

DDK у мня есть только вот времени и знаний пока
для разработки драйверов нет. Если бы подсказали вкратце как это делается, то был бы очень рад.
424
05 января 2003 года
(C)dragon
307 / / 04.12.2002
Функции чтения секторов лучше разместить в DLL, а из C++ их всего лишь вызывать, и никиких вставок делать не нужно. Такой метод хорош при чтении с дискеты, потому что порты 03F2 - 03F5 не закрываются Windows. А порты для работы с IDE-винтами обычно закрыты, чтобы пользователь не мог перезаписать MBR, поэтому и надо драйвера писать, чтобы к винтам был полный доступ. Код для чтения секторов на асме можешь выслать сюда - (dtdcs@mail.ru), а проект VC++6 можешь не высылать, т.к. он у меня не стоит - пользуюсь Borland C++5.
2.1K
05 января 2003 года
OxMDN
17 / / 13.12.2002
Цитата:
Originally posted by Fantomas
http://www.codenet.ru/progr/dos/int_0012.php



Да инфа полезная , но только вот я читал,
что при помощи int 13h нельзя считывать сектора,
произвольного формата (128, 256) байт, т.к.
мол все функции его (13h) настроены на длину
сектора 512 байт, что мне не годиться ... надо
бы читать с произвольной длиной сектора.

2.1K
05 января 2003 года
OxMDN
17 / / 13.12.2002
Цитата:
Originally posted by (C)dragon
Функции чтения секторов лучше разместить в DLL, а из C++ их всего лишь вызывать, и никиких вставок делать не нужно. Такой метод хорош при чтении с дискеты, потому что порты 03F2 - 03F5 не закрываются Windows. А порты для работы с IDE-винтами обычно закрыты, чтобы пользователь не мог перезаписать MBR, поэтому и надо драйвера писать, чтобы к винтам был полный доступ. Код для чтения секторов на асме можешь выслать сюда - (dtdcs@mail.ru), а проект VC++6 можешь не высылать, т.к. он у меня не стоит - пользуюсь Borland C++5.



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

424
05 января 2003 года
(C)dragon
307 / / 04.12.2002
Я вот посмотрел на эти исходники, и ...

Вот интересно, где же ты видел дискету с сектором не 512 байт? Хотел бы на неё посмотреть. На всех дискетах, винтах и даже флэш-картах размер сектора - 512, и только на CD дисках он 2048. Так что если надо читать с CD, надо сделать отдельную функцию, т.к. работа с ATAPI(всё же он самый распространённый) не имеет ничего общего с чтением секторов с жёсткого диска и дискеты.
2.1K
05 января 2003 года
OxMDN
17 / / 13.12.2002
Цитата:
Originally posted by (C)dragon
Я вот посмотрел на эти исходники, и ...

Вот интересно, где же ты видел дискету с сектором не 512 байт? Хотел бы на неё посмотреть. На всех дискетах, винтах и даже флэш-картах размер сектора - 512, и только на CD дисках он 2048. Так что если надо читать с CD, надо сделать отдельную функцию, т.к. работа с ATAPI(всё же он самый распространённый) не имеет ничего общего с чтением секторов с жёсткого диска и дискеты.




НУ вот пришла пора все рассказать сначала.
Ты не злись я не умничаю ... просто у мня есть предположение.
Короче у мня есть диск на 5,25 и на нем есть
всякая всячина, которую мне надо бы считать(все сектора от 0 и до конца).
Да только вот при помощи высокоуровневых функций
типа ReadFile она не читается.
Формат дискеты мне неизвестен. Известно только
что кластер в этой системе(очень древняя и заточена под определенное оборудование MILOS), в которой используются эти дискеты 512 байт, а сколько в кластере неизвестно. Вот я и предположил, что если дискета не читается функциями, которые читают 512 байтовые сектора,
то возможно там сектор имеет меньшую длину.

Если ты видешь какие либо другиие причины, почему могут не читаться дискеты .. плз назови мне их.
У мня есть подозрение, что их может быть больше ... но тогда мне прийдется излить порядком больше воды, чем я тут налил ... модераторы и так наверное уже не рады :(

У тебя аська есть ? Может пришлешь номер .
Так было бы удобнее и быстрее. Понятно, что
тебе от этого выгоды мало, и экспа 0.
Но только вот я не знаю как быть и все.

2.1K
05 января 2003 года
OxMDN
17 / / 13.12.2002
Цитата:
Originally posted by (C)dragon
Я вот посмотрел на эти исходники, и ...


Что кстати на чсет исходников ... что совсем
с ними все плохо или как?

424
05 января 2003 года
(C)dragon
307 / / 04.12.2002
Да нет, просто я никогда не видел дискет с секторами не 512 байт, и не видел, чтобы под Windows DMA использовали. Ведь откуда ты знаешь, что храниться в памяти <1Mb? Может там каталоги страниц, GDT, или ещё что-нибудь? Так вот, для чтения не надо DMA включать, лучше через rep insb.
2.1K
05 января 2003 года
OxMDN
17 / / 13.12.2002
Цитата:
Originally posted by (C)dragon
Да нет, просто я никогда не видел дискет с секторами не 512 байт, и не видел, чтобы под Windows DMA использовали. Ведь откуда ты знаешь, что храниться в памяти <1Mb? Может там каталоги страниц, GDT, или ещё что-нибудь? Так вот, для чтения не надо DMA включать, лучше через rep insb.



Слушай я не секу что такое GDT или rep insb...
я просто честно содрал исходники откуда я сказал
вот и все и старался их приспособить для себя.
Теперь я понял что доступ к портам DMA для мня
под виндой закрыт и обдумываю как бы сделать все под досом, вот и все ...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог