Статьи по программированию
примеры программного кода
Delphi, Kylix, C, C++, SQL, Visual Basic, Bash, Assembler, 1С
Qt, KOL, MFC, Rx Library, Windows, Linux, Mac OS
Пример использования команды CHANGE DEFINITION
Опубликовано codeLocker в 20.09.2008 в 12:23.
BYTE Change (BYTE byAdapter, BYTE byTarget)
{
//объявляем переменные
SRB ExecSCSICmd Exec; // структура обработки команды ASPI
HANDLE hEventASPI; // объект события
DWORD dwStatus;
// обнуляем структуру SRB_ExecSCSICmd
memset (SExec, 0, sizeof (SRB_ExecSCSICmd) ) ;
// заполняем структуру данными
Exec.SRB_Cmd = SC_EXEC_SCSI_CMD;
Exec.SRB_HaId = byAdapter;
// как получить значения byAdapter и byTarget
// описано во второй главе книги
Exec.SRBJTarget = byTarget;
Exec.SRB_Lun = 0;
Exec.SRB_Flags = SRB_DIR_OUT |SRB_EVENT_NOTIFY;
Exec.SRB_SenseLen = SENSE_LEN;
// размер поля отчета
Exec.SRB_PostProc = (LPVOID) hEventASPI;
// определяем объект события
Exec.SRB_CDBLen =10;
// размер команды
Exec.CDBBytefO] = SCSI_CHANGE_DEF;
// код команды (0x40)
Exec.CDBByte[l] = 0x00;
// ЛНУ не используется
Exec.CDBByte[2] = 0x01;
// сохраняем значение
Exec.CDBByte[3] = 0x03;
// SCSI-2 значение
Exec.CDBByte[8] = ОхОА;
// длина 10 байт
// выполняем команду через ASPI с обработкой ожидания
for (int i = 1; i < 2; i++){
// создаем объект события -
hEventASPI = CreateEvent (NULL, TRUE, FALSE, NULL);
ResetEvent (hEventASPI);
dwStatus = SendASPI32Command ((LPSRB)&Exec);
// выполняем команду ASPI
if (dwStatus = = SS_COMP)
// если команда завершена, выходим из цикла
{
CloseHandle (hEventASPI);
break;
}
if (dwStatus = = SS_PENDING) // если команда выполняется, ждем
{
if (WAIT_TIMEOUT != WaitForSingleObject (hEventASPI, INFINITE))
{
CloseHandle (hEventASPI);
break;
}
}
// команда выполнена без ошибок
if (Exec.SRB_Status = = SS_COMP)
{
// делаем что-нибудь нужное
}
.
return Exec.SRB_Status;
}
{
//объявляем переменные
SRB ExecSCSICmd Exec; // структура обработки команды ASPI
HANDLE hEventASPI; // объект события
DWORD dwStatus;
// обнуляем структуру SRB_ExecSCSICmd
memset (SExec, 0, sizeof (SRB_ExecSCSICmd) ) ;
// заполняем структуру данными
Exec.SRB_Cmd = SC_EXEC_SCSI_CMD;
Exec.SRB_HaId = byAdapter;
// как получить значения byAdapter и byTarget
// описано во второй главе книги
Exec.SRBJTarget = byTarget;
Exec.SRB_Lun = 0;
Exec.SRB_Flags = SRB_DIR_OUT |SRB_EVENT_NOTIFY;
Exec.SRB_SenseLen = SENSE_LEN;
// размер поля отчета
Exec.SRB_PostProc = (LPVOID) hEventASPI;
// определяем объект события
Exec.SRB_CDBLen =10;
// размер команды
Exec.CDBBytefO] = SCSI_CHANGE_DEF;
// код команды (0x40)
Exec.CDBByte[l] = 0x00;
// ЛНУ не используется
Exec.CDBByte[2] = 0x01;
// сохраняем значение
Exec.CDBByte[3] = 0x03;
// SCSI-2 значение
Exec.CDBByte[8] = ОхОА;
// длина 10 байт
// выполняем команду через ASPI с обработкой ожидания
for (int i = 1; i < 2; i++){
// создаем объект события -
hEventASPI = CreateEvent (NULL, TRUE, FALSE, NULL);
ResetEvent (hEventASPI);
dwStatus = SendASPI32Command ((LPSRB)&Exec);
// выполняем команду ASPI
if (dwStatus = = SS_COMP)
// если команда завершена, выходим из цикла
{
CloseHandle (hEventASPI);
break;
}
if (dwStatus = = SS_PENDING) // если команда выполняется, ждем
{
if (WAIT_TIMEOUT != WaitForSingleObject (hEventASPI, INFINITE))
{
CloseHandle (hEventASPI);
break;
}
}
// команда выполнена без ошибок
if (Exec.SRB_Status = = SS_COMP)
{
// делаем что-нибудь нужное
}
.
return Exec.SRB_Status;
}
Материал похожий на Пример использования команды CHANGE DEFINITION
- Получение информации о контроллерах
- Пример использования команды CHANGE DEFINITION
- Получение информации о контроллерах
- Пример использования команды COPY
- Пример использования DirectSound на Delphi
Навигация
Сейчас на сайте
Сейчас на сайте 0 пользователей и 1 гость.
Статистика
Всего материалов: 1387