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

Вниз

Как же всё-таки с любых накопителей читать "напрямую"?   Найти похожие ветки 

 
Номолос   (2004-01-01 19:44) [0]

Напрямую - значит вместе с файловой системой и подобной швалью, побайтно? Со всех: с ффлоппи, с нжмд, с компактов, дивиди и пр.


 
Rouse_ ©   (2004-01-02 16:32) [1]

Понятие драйвера имеем?
Если да, то глупый вопрос, если нет... читаем книжки...


 
Дмитрий В. Белькевич ©   (2004-01-02 19:56) [2]

Сам не пробовал, попробуй, если бы еще рассказал о результатах, был бы благодарен.

const
 VWIN32_DIOC_DOS_INT25 = 2;
 VWIN32_DIOC_DOS_INT26 = 3;

type
 DIOC_REGISTERS = packed record
   reg_EBX: DWORD;
   reg_EDX: DWORD;
   reg_ECX: DWORD;
   reg_EAX: DWORD;
   reg_EDI: DWORD;
   reg_ESI: DWORD;
   reg_Flags: DWORD;
 end;

var
 hDevice: THandle;

function AbsRead(Drive: Word; nsects: Integer; lsect: Longint; var Buffer):
Boolean;
var
 fResult: Bool;
 reg: DIOC_REGISTERS;
 cb: DWORD;
begin
 Result := True;
 reg.reg_EAX := Drive;
 reg.reg_ECX := nsects;
 reg.reg_EDX := lsect;
 reg.reg_EBX := DWORD(@Buffer);
 fResult := DeviceIoControl(hDevice, VWIN32_DIOC_DOS_INT25, @reg,
SizeOf(reg),
   @reg, SizeOf(reg), cb, nil);
 if (fResult <> True) or ((reg.reg_Flags and $1) <> 0) then
   Result := False
end;

initialization
 hDevice := CreateFile("\\.\vwin32", 0, 0, nil, 0,
FILE_FLAG_DELETE_ON_CLOSE, 0)
finalization
 CloseHandle(hDevice)
end.


И еще:

=============================================================================
* Переслал Artem Gryaznov (2:6096/10.666)
* Откуда  : RU.DELPHI (RU.DELPHI)
* От кого : Stas Malinovski, 2:5020/400 (16 май 01 18:06)
* Кому    : Andrey Savchenko
* Hа тему : Re: Прямой доступ к секторам диска
=============================================================================
From: Stas Malinovski <stasm@tsl.ru>
Reply-To: Stas Malinovski <stasm@tsl.ru>

Hello Andrey,

AS> Подскажите  плз,  как  осуществить в Delphi сабж (аналогия int 13h int 26h)
AS> ?

Для Win9x int25/26 и int13 "эмулирует" vwin32.vxd, для WinNT -
используй DeviceIOControl. Вот небольшая иллюстрация этого
подхода на Це (на эхотаг перевести нетрудно):

#ifdef _NT_
HANDLE hDrive=CreateFile("\\\\.\\C:",GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NUL L,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL ,NULL);
#endif

HANDLE hVWIN32Device=CreateFile("\\\\.\\vwin32",GENERIC_READ,FILE_SHARE_READ |
FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
int iFileSystem;
int Disk; // Диск, который читаем A=0

typedef struct _param_disk_{
     unsigned long startsec;
     WORD count;
     WORD far * buffer;
} param_disk;

param_disk* pint25_d;

int _cdecl absread4(void)
{
#ifndef _NT_
DIOC_REGISTERS reg;
int ErrorCode;

if(iFileSystem==32) //VFAT32
 return absreadFAT32();
#ifdef _DEBUG
if(IsBadWritePtr(pint25_d->buffer,pint25_d->count*512))
 return 1;
#endif
reg.reg_EAX=Disk;  //Zero based!!!
reg.reg_ECX=0xffffffff;
reg.reg_EBX=(DWORD)pint25_d;
if(!DoIOCTL(&reg,VWIN32_DIOC_DOS_INT25)||(reg.reg_Flags & 1))
{
 ErrorCode=(int)LOBYTE(LOWORD(reg.reg_EAX));
 wsprintf((LPSTR)TextForOut,(LPSTR)ReadError,ErrorCode,Disk+"A");
 MessageBox(hwnd1,TextForOut,NKernelHeader,MB_ICONINFORMATION);
 return ErrorCode;
}
return 0;
#else
DWORD dwReaded;
DWORD dwHi=((pint25_d->startsec))>>23;
if(0xFFFFFFFF==SetFilePointer(hDrive,pint25_d->startsec*512,&dwHi,FILE_BEGIN)
)
 dwReaded=GetLastError();
if(ReadFile(hDrive,pint25_d->buffer,pint25_d->count*512,&dwReaded,NULL))
{
 return 0;
}
dwReaded=GetLastError();
wsprintf((LPSTR)TextForOut,(LPSTR)ReadError,dwReaded,Disk+"A");
OUT_DEBUG_ERROR(TextForOut);
return 0xff;
#endif
}

__declspec(dllexport) int DoIOCTL(PDIOC_REGISTERS preg, DWORD Flag)
{
#ifndef _NT_
DWORD cb;
return
DeviceIoControl(hVWIN32Device,Flag,preg,sizeof(*preg),preg,sizeof(*preg),&cb,0)
;
#else
preg->reg_Flags = CARRY_FLAG;
return 0;
#endif
}

--
Best regards,
Stas Malinovski.           mailto:stasm@tsl.ru

Отправлено через сервер Talk.Ru - http://www.talk.ru
-+- ifmail v.2.15dev5
+ Origin: Talk.Ru (2:5020/400)


 
Alex Konshin ©   (2004-01-03 00:37) [3]

Под NT открывай диск как файл и читай.
Внимательно прочти описание CreateFile:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/createfile.asp


 
Rouse_ ©   (2004-01-03 04:04) [4]

Хм .... смелый эксперимент....


 
DVM ©   (2004-01-05 17:40) [5]


> Напрямую - значит вместе с файловой системой и подобной
> швалью, побайтно? Со всех: с ффлоппи, с нжмд, с компактов,
> дивиди и пр.

Можно через ASPI (расширение от Adaptec, входящее в Win). И не только дисководы, а еще принтеры, стриммеры, сканеры. Не обращайте внимание, что это дело вроде бы для SCSI устройств предназначено - прекрасно работает и с IDE и FDD.


 
Alex Konshin ©   (2004-01-06 06:27) [6]

Все хорошо, вот только ASPI не поддерживается Microsoft и в Windows уже не входит.
И это требует дополнительной установки драйверов ASPI.
То есть, это тоже не решение.


 
Kerk ©   (2004-01-06 14:05) [7]


> Дмитрий В. Белькевич ©   (02.01.04 19:56) [2]
> Для Win9x int25/26 и int13 "эмулирует" vwin32.vxd

vwin32.vxd (кстати, такого файла не существует, а есть драйвер vwin32, который сидит кажется в vmm.vxd) не позволяет использовать int13h для работы с винтами.


> DVM ©   (05.01.04 17:40) [5]
> Можно через ASPI (расширение от Adaptec, входящее в Win).

Где можно об этом почитать и/или посмотреть примеры?


 
DVM ©   (2004-01-06 15:51) [8]


> Alex Konshin ©   (06.01.04 06:27) [6]

Да, это все конечно правильно, но в то же время никто не мешает этот ASPI установить при установке свое программы (как делают очень многие).

> > DVM ©   (05.01.04 17:40) [5]
> > Можно через ASPI (расширение от Adaptec, входящее в Win).
> Где можно об этом почитать и/или посмотреть примеры?

Не знаю где в инете, но есть неплохая книжка:
http://book.vsem.ru/binfo.asp?cod=129585
Правда только бумажный вариант.


 
Alex Konshin ©   (2004-01-06 20:51) [9]

Если говорить уж совсем теоретически, то с SCSI дисками напрямую в NT+ нужно работать через SPTI. Пример есть в DDK.
Для IDE тоже есть аналогичный IOCTL код, но он нигде не описан. Если же кто видел где-нибудь его описание (хотя бы частичное) - дайте знать. Они (MS) его засекретили и понятно почему: по сути это дыра в секьюрити.


 
Nomolos ©   (2004-01-07 23:58) [10]

Я тут подумал: а вся эта фигня кем-то опробована? Она во всех форточках прёт (там 9x, XP, NT, CE...)?


 
Alex Konshin ©   (2004-01-08 01:33) [11]

Фигня прет.

Ты о чем?


 
Nomolos ©   (2004-01-08 23:10) [12]

Мне просто надо писать мультиплатформенную пагу. Я вот и боюсь.


 
Alex Konshin ©   (2004-01-09 06:39) [13]

CE тут точно не в тему, хотя IOCTL там вроде тоже работает, но
только Delphi тебе не пригодится.
А универсального решения нет.


 
Nomolos ©   (2004-01-09 23:00) [14]

Эх... Где ты, родной int 13h?...


 
Alex Konshin ©   (2004-01-10 02:18) [15]

Думаешь тебе бы помог int 13h на Windows CE?
Microsoft не хочет, чтоб кто-то мог лазить грязными руками по диску и понять их можно. Но это можно сделать на Windows NT/2K/XP. Получить прямой доступ там тоже можно, но уже с проблемами:
- для SCSI можно использовать SPTI, но это требует прав администратора;
- для SCSI можно использовать ASPI, но это требует установки драйвера (тоже нужно право администратора) и это не поддерживается MS;
- для IDE ioctl код, аналогичный SPTI недокументирован (вообще никакой информации).



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

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

Наверх




Память: 0.49 MB
Время: 0.036 c
4-1074052375
Sirus
2004-01-14 06:52
2004.03.28
Нужно событие типа AfterClose формы...


7-1073745231
Ancara
2004-01-10 17:33
2004.03.28
com-порт в WinXP


1-1078400588
ChcngerMan
2004-03-04 14:43
2004.03.28
Internet+computer


9-1062909682
Micah'GF
2003-09-07 08:41
2004.03.28
TDIB => TImage


1-1078326766
mOOx_
2004-03-03 18:12
2004.03.28
по поводу FindFirst and FindNext...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский