WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Произвольное чтение

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Произвольное чтение
Susik опубликован 20-07-2001 11:15 MSK   Click Here to See the Profile for Susik   Click Here to Email Susik  
ВСем привет. Не знаю как сделать в винде произвольное (т.е. по секторам) чтение (и по возможности запись) с диска или памяти. Кто-нить может помочь?
Kosha опубликован 21-07-2001 19:47 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Учитель конечно лопух, но по-моему тут надо VXD писать... Поправьте если не прав...

А вообще, много народу это делало...
Я думаю просто покопаться надо в инете...

Вот первый пришедший в голову пример:
NDD,ScanDisk и Speeddisk это делают.
Как ScanDisk - не знаю, а у Symantec наверняка своя DLL есть...

server_mouse опубликован 21-07-2001 20:39 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Ну есть на самом деле логический диск и физический. Если тебе надо писать в MBR например, то без VxD не обойтись. А по логическому кажись можно и так..., DLL максимум.
Susik опубликован 23-07-2001 13:25 MSK     Click Here to See the Profile for Susik  Click Here to Email Susik     
Мне вообще физическое чтение интересно. Если надо вхд писать, то я вообще не умелец писать дрова. :) Может кто научит?
server_mouse опубликован 23-07-2001 23:55 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Если всё под 9х то можно и без VxD. Получаешь 0-й уровень привелегий (извесная дыра, которую использует в частности WinCIH) и юзаешь ф-ции WriteAbsoluteDisk и eadAbsoluteDisk. Ф-ции вроде IFS, хотя до конца не уверен... Да какая разница! Юзай и всё!
server_mouse опубликован 23-07-2001 23:57 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
Да, ещё. Ежели надумаешь VxD писать -- мыль. некоторая инфа имеет место быть. ;-))
Susik опубликован 24-07-2001 16:34 MSK     Click Here to See the Profile for Susik  Click Here to Email Susik     
Допустим, с физическим чтением с диска я разобрался (посредством DeviceIoControl() с вызовом Int21h Function 7305h Ext_ABSDiskReadWrite (FAT32)).

Теперь вопрос только в том, как читать из памяти. Здесь некоторые говорят, что необходимы дрова. Так ли это? Если да - то научите, что и как надо делать. :)

Ritchie опубликован 06-02-2001 20:48 MSK     Click Here to See the Profile for Ritchie  Click Here to Email Ritchie     
to server_mouse: Sorry за чайниковый вопрос, но как все-таки в нулевой ринг попасть, а? И поможет ли это?

to Susik: ну, вообще-то это не совсем решение проблемы, во всяком случае, моей. Мне нужно читать с винта с не-фатом, а этого так просто не сделать. :-( Кстати, если найдешь, как читать из памяти, кинь, пожалуйста.

Susik опубликован 06-02-2001 21:47 MSK     Click Here to See the Profile for Susik  Click Here to Email Susik     
Я вообще не пробовал, как там читать с не_фатом, но с фатом у меня читается все достаточно нормально: и с винта, и с дискетки. :) А! Дискетку переписывал много раз всякими своими штуками (допустим просто текст какой-нить), там уже фатом давно и не пахло (писал в область его расположения), а читалось, в общем-то, как и должно читаться.

А что такое нулевой ринг? И зачем он нужен?

Ritchie опубликован 07-02-2001 04:36 MSK     Click Here to See the Profile for Ritchie  Click Here to Email Ritchie     
Хм-хм, и чем читал? В смысле с дискеты, где фатом и не пахло?
Просто дело в том, что тот же vwin32 прекрасно эмулирует 13h для дискеты, но совершенно не хочет его использовать для винта, даже если на тот поставить physical lock самого понтового уровня (я про нулевой, lock level 0 - это виндовская штука для защиты во время проведения, скажем, дефрагментации, винта от всех других приложений). Может, правда, это я чего не так сделал, но пока не пойму, чего.

А нулевой ринг - это ring 0, как он называется в виндах. На самом деле в 386 камне было аппаратно реализовано наличие разных привилегий. Собственно, существуют четыре положения процессора, от 0 до 3. То, что идет при нуле, обладает максимальными правами, у нее есть доступ ко всему (потому что если у нее нет, то вообще ни у кого не будет). А если ты сидишь на тройке, то почти ничего сделать напрямую не можешь.
В виндах в 0 сидят VMM, распределяющий память, и чего-то еще важное, забыл что. А все остальные, включая ядро, не говоря уже о всяких там пользвательских прогах, сидят в ring 3. Откуда посылают все на обработку тем, кто сидит в нуле.
Другое дело, что, скажем, если ты драйвер, то выходить в нулевое кольцо, скорее всего, все равно придется.
Я страшно сумбурно об этом рассказываю, но если чего еще интересно, спрашивай, а то посмотри какую-нибудь книжку по ASM'у про архитектуру 386, въехать поначалу будет трудно, но иметь обо всех подобных штуках представление вполне себе полезно :-)
Про реализацию колец в виндах можно тот же MSDN посмотреть.

Susik опубликован 07-02-2001 16:47 MSK     Click Here to See the Profile for Susik  Click Here to Email Susik     
Пасиб. А то че-то пишут тут иногда про кольца, а я ваще темный...
purpe опубликован 07-02-2001 19:06 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
http://www.sources.ru/asm/get_ring_0_privilege.shtml
Susik опубликован 07-02-2001 21:34 MSK     Click Here to See the Profile for Susik  Click Here to Email Susik     
Пасиба тоже. :) Как-нить поэкспериментирую.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.