Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Работа с винтом на низком уровне.

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Usachev



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос такой: как работать м винтом на назком уровне в винде. Найденые источники в один голос заявляют, что нада писать дровень. В моем случае это неприемлимо. Подскажите плз хотя бы что искать.

Всего записей: 50 | Зарегистр. 05-01-2007 | Отправлено: 22:44 13-02-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А что значит "низкий уровень"? DeviceIoControl() не подходит?

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 13:27 14-02-2007
Usachev



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не подходит ни одно стандартное средство винды.

Всего записей: 50 | Зарегистр. 05-01-2007 | Отправлено: 21:41 14-02-2007
FuzzyLogic



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Usachev
Может пояснишь задачу? Почему ничего не подходит, что именно надо, почему неприемлем драйвер. В текущей постановке похоже что кроме драйвера сложно что-то придумать, но опять же, непонятно что именно надо.

Всего записей: 1920 | Зарегистр. 27-07-2002 | Отправлено: 23:38 14-02-2007
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Можно. Пишем свою мини прогу, которая стартует прям с дискетки. Прийдётся правда помучиться и сделать загрузочной, но зато никто, только собственное нежаление, не будет мешать делать с винтом всё что угодно.
Почеу винда запрещает делать с винтом что угодно из под себя - да банально, она просто не в состоянии себе представить, что вы сделаете и как ей после этого работать. И если с несистемным разделом ещё можно как то мириться (отключили потом подключили) то с системным - это всё равно, что операция на серце без наркоза. И ничего, что вы чётко представляете, что вы сделаете и 100% уверены, что это не навредит. С другими операционками аналогично.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:13 15-02-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не только это. Непосредственная работа с железом несовместима с вытесняющей многозадачностью, и непереносима на другие платформы. Как известно, кроме x86, которых тоже уже три, WinNT портирована на Alpha, MIPS, PPC. И везде Win32 один и тот же. А вот принципы программирования железа разные.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 13:52 15-02-2007
Dem_anywhere



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вообще говоря, читать можно в любой момент через "\\.\PHYSICALDRIVE<n> " или "\\.\А:" и т.д.
Писать тоже можно - но надо предварительно драйв отключить и залочить, где-то пример форматирования дискеты валялся. Естественно, с системным такой номер не пройдёт.

Всего записей: 230 | Зарегистр. 28-02-2006 | Отправлено: 17:55 15-02-2007
Usachev



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dem_anywhere
Похоже без апишек обойтись не получится.
 ДАй примерчик плз....

Всего записей: 50 | Зарегистр. 05-01-2007 | Отправлено: 21:46 15-02-2007
rain87



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Usachev
пример довольно тривиальный
Код:
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
 
void main()
{
  HANDLE f=CreateFile(_T("\\\\.\\PHYSICALDRIVE0"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
  if(f==INVALID_HANDLE_VALUE)
  {
    printf("Unsuccess\n");
    return;
  }
  char buf[512];
  DWORD read;
  ReadFile(f,buf,512,&read,NULL);
  CloseHandle(f);
}
вот, считал первый сектор винта в buf. можно анализировать МБР или что там надо

Всего записей: 1744 | Зарегистр. 21-06-2006 | Отправлено: 01:04 16-02-2007
Usachev



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И на том спасибо. Вразумили.

Всего записей: 50 | Зарегистр. 05-01-2007 | Отправлено: 23:09 18-02-2007
Apalon



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору





дофлудился.

Всего записей: 44 | Зарегистр. 21-03-2007 | Отправлено: 17:05 24-03-2007 | Исправлено: ShIvADeSt, 02:39 26-03-2007
strlab

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Usachev
Интересная задачка... помню решалась на 2 курсе. Дело в том, что винда не позволяет общаться с устройствами с прикладного уровня посредством асм.команд in и out. Однако есть лазейка, нужно просто в программе обратиться к драйверу giveio.sys. И, о чудо, все порты ввода вывода открыты для вашего процесса, т.е. можно пользоваться командами in и out, и обращаться к любым адресам ввода вывода.
Подробности читайте http://void.ru/?do=printable&id=701
И удачи...

Всего записей: 1 | Зарегистр. 09-02-2007 | Отправлено: 20:44 26-03-2007
NightSpamer



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
strlab, это справедливо только для NT (2k/2k3/xp). Win9x не запрещает пользоваться командами работы с портами на пользовательском (cpl3) уровне привелегий. Думаю, так-же позволит работать и с INT 13h (AH=02/03 Read/write sectors into/form memory)

Всего записей: 291 | Зарегистр. 28-11-2006 | Отправлено: 12:20 27-03-2007
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
strlab
...и успехов в соперничестве с драйверами за совместный доступ к контролируемым ими устройствам. Очень полезная статья, настоятельно рекомендую прочитать полностью. Мог бы подобавлять чуток к описанию архитектуры x86-процессоров, но не буду, сказанного в статье достаточно.
NightSpamer
Не-а. Она-то не запрещает, но любой драйвер может это сделать. И многие делают. Я сам в частности писал трэйсер/портов с последующим эмулятором I/O-протокола. Что касается портов HDD и int 13h, то они напрочь запрещаются. Однако VWin32.VxD предоставляет хороший интерфейс DeviceIoControl(), который отображается на int 21h

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 14:41 27-03-2007
Greendye

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Пишем свою мини прогу, которая стартует прям с дискетки. Прийдётся правда помучиться и сделать загрузочной

Не проще ли с cd грузиться с кноппиксом каким-нибудь?
Для меня, после того как в первый раз показали кноппикс, загрузочные дискеты ушли в прошлое

Всего записей: 9 | Зарегистр. 14-07-2005 | Отправлено: 17:36 04-04-2007
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Работа с винтом на низком уровне.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru