![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 28.08.2011
Сообщений: 1
|
![]()
Здравствуйте. Суть - простейшая программка для записи дисков напрямую чрез ASPI.
[too] // Настройки MODE SELECT 10 // ...... buf[8]=0x05; buf[9]=0x32; buf[10]=0x01; buf[11]=0x46; buf[12]=0x08; // ....... Srex.CDBByte[0]=SCSI_MODE_SEL10; Srex.CDBByte[1]=0x10; Srex.CDBByte[7]=0x01; Srex.CDBByte[8]=0x00; // Функция записи BYTE write(BYTE adap, BYTE targ, char *st){ DWORD Sendcom, size; HANDLE hel, hev; unsigned char buf[2048]; long lba=0; // адрес первого сектора диска SRB_ExecSCSICmd Srex; hel=CreateFile(st,GENERIC_READ|GENE RIC_WRITE,NULL,NULL,OPEN_EXISTING,N ULL,NULL); if(hel==INVALID_HANDLE_VALUE){cout< <"Handle create fail!!"<<endl;} size=GetFileSize(hel,NULL); for(DWORD sect=0;sect<size/2048;sect++){ hev=CreateEvent(NULL,TRUE,FALSE,NUL L); if(!hev){cout<<"Event fail!!!"<<endl;} memset(&Srex,0,sizeof(SRB_ExecSCSIC md)); memset(&buf,0,2048); if (!ReadFile(hel,&buf,sizeof(buf),&co unt,NULL))cout<<"Read fail!!! "<<GetLastError()<<endl; Srex.SRB_Cmd=SC_EXEC_SCSI_CMD; Srex.SRB_Flags=SRB_DIR_OUT|SRB_EVEN T_NOTIFY; Srex.SRB_HaId=adap; Srex.SRB_Target=targ; Srex.SRB_SenseLen=SENSE_LEN; Srex.SRB_CDBLen=10; Srex.SRB_Lun=0; Srex.SRB_BufPointer=buf; Srex.SRB_BufLen=2048; Srex.SRB_PostProc=(LPVOID)hev; Srex.CDBByte[0]=SCSI_WRITE10; Srex.CDBByte[1]=0x00; Srex.CDBByte[2]=(lba>>24); Srex.CDBByte[3]=(lba>>16); Srex.CDBByte[4]=(lba>>8); Srex.CDBByte[5]=lba; Srex.CDBByte[8]=0x01; ResetEvent(hev); Sendcom=SendASPI32Command((LPSRB)&S rex); if(Sendcom==SS_PENDING){ if (WAIT_TIMEOUT!=WaitForSingleObject( hev,INFINITE)){ CloseHandle(hev);break;} } if(Sendcom==SS_COMP){CloseHandle(he v);break;} lba++; //записав один сектор переходим к следующему if(Gta==SS_ERR && Srex.SRB_TargStat==STATUS_CHKCOND){ cout<<"Write sense key: "<<(DWORD*)(Srex.SenseArea[2])<<endl; cout<<"Write ASC: "<<(DWORD*)Srex.SenseArea[12]<<endl; cout<<"Write ASCQ: "<<(DWORD*)Srex.SenseArea[13]<<endl; return Srex.SRB_Status; } } return Srex.SRB_Status; } [/too] Происходит запись одного сектора по адресу 0. При попытке записи следующего сектора вываливается ошибка: 05 21 02 - INVALID ADDRESS FOR WRITE. Почему? Помогите разобраться, пожалуйста. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Access violation at address 004733C4 in module 'loginin.exe'. Read of address 00000048' | pavellyba | Общие вопросы Delphi | 2 | 18.08.2011 10:32 |
Access violation at address 00447E73 in modul Project.exe. Read of address 00000057. | ArtGrek | Общие вопросы Delphi | 40 | 12.03.2011 22:03 |
Access violation at address 00478D0E in module 'Project1.exe'. Write of address 00000000 | fondreykus-1 | Общие вопросы Delphi | 5 | 27.01.2010 14:25 |
почему может возникать ошибка access violation...: write of address при создании динамического массива | sleevman | Помощь студентам | 16 | 03.11.2009 20:49 |
Ошибка: "Access violation at address 00454F01 in module 'Project1.exe'. Read of address 00000000. | Fen1x | Общие вопросы Delphi | 8 | 13.10.2007 20:13 |