Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SCSI_WRITE10 
:(
    Опции темы
rattick
Дата 27.8.2011, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 24.2.2007

Репутация: нет
Всего: нет



Здравствуйте. Суть - простейшая программка для записи дисков напрямую чрез ASPI.

Код

// Настройки 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|GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,NULL,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,NULL);
        if(!hev){cout<<"Event fail!!!"<<endl;}
        memset(&Srex,0,sizeof(SRB_ExecSCSICmd));
        memset(&buf,0,2048);
        if (!ReadFile(hel,&buf,sizeof(buf),&count,NULL))cout<<"Read fail!!!   "<<GetLastError()<<endl;
        Srex.SRB_Cmd=SC_EXEC_SCSI_CMD;
        Srex.SRB_Flags=SRB_DIR_OUT|SRB_EVENT_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)&Srex);
        if(Sendcom==SS_PENDING){
            if (WAIT_TIMEOUT!=WaitForSingleObject(hev,INFINITE)){
            CloseHandle(hev);break;}
        }
        if(Sendcom==SS_COMP){CloseHandle(hev);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;
}


Происходит запись одного сектора по адресу 0. При попытке записи следующего сектора вываливается ошибка:
05 21 02 - INVALID ADDRESS FOR WRITE. Почему? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0398 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.