Статьи по программированию
примеры программного кода
Delphi, Kylix, C, C++, SQL, Visual Basic, Bash, Assembler, 1С
Qt, KOL, MFC, Rx Library, Windows, Linux, Mac OS
Пример использования команды INQUIRY
Опубликовано codeLocker в 20.09.2008 в 12:59.
BYTE Getlnfo (BYTE byAdapter, BYTEbyTarget, char* buffer)
{
// объявляем переменные
SRB_ExecSCSICmd Exec; // структура обработки команды ASPI
HANDLE hEventASPI; // объект события
BYTE byBuff [100] ; // буфер для хранения полученных данных
DWORD dwStatus;
// обнуляем структуру SRB_ExecSCSICmd и буфер
memset (SExec, 0, sizeof (SRB_ExecSCSICmd));
memset (byBuff, 0, 100);
// заполняем структуру данными
Exec.SRB_Cmd = SC_EXEC_SCSI_CMD;
Exec.SRB Hald = byAdapter; // как получить значения byAdapter и byTarget // описано во второй главе книги
Exec.SRBJTarget = byTarget;
Exec.SRB Lun = 0;
Exec.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY;
Exec.SRB_BufLen = 100; // размер буфера для данных
Exec.SRB_BufPointer = byBuff; // указатель на буфер данных
Exec.SRB_SenseLen = SENSE_LEN; // размер поля отчета
Exec.SRB PostProc = (LPVOID) hEventASPI; // определяем объект события
Exec.SRB_CDBLen =6;
// размер команды INQUIRY
Exec.CDBByte[0] = SCSI_INQUIRY; // заносим по адресу первого байта
// значение команды INQUIRY (0x12)
Exec.CDBByte[4] = 100;
// заносим по адресу четвертого байта размер буфера
// выполняем команду через ASPI с обработкой ожидания
for (int i = 1; i < 2; i++)
{
// создаем объект события
hEventASPI = CreateEvent (NULL, TRUE, FALSE, NULL);
ResetEvent (hEventASPI);
dwStatus = SendASPI32Command ( (LPSRB) SExec);
// выполняем команду ASPI
if (dwStatus = = SS_COMP)
// если команда завершена, выходим из цикла
break;
}
if (dwStatus = = SS_PENDING) // если команда выполняется, ждем
{
if (WAIT_TIMEOUT != WaitForSingleObject (hEventASPI, INFINITE)) {
CloseHandle {hEventASPI);
break;
}
}
}
// если команда выполнена без ошибок, извлекаем из буфера имя устройства
if (Exec.SRB_Status = = SS_COMP)
{
for (int j = 8; j < 36; j++)
{
buffer[i-8] =byBuff[i];
}
buffer [28] = NULL;
}
return Exec.SRB_Status;
{
// объявляем переменные
SRB_ExecSCSICmd Exec; // структура обработки команды ASPI
HANDLE hEventASPI; // объект события
BYTE byBuff [100] ; // буфер для хранения полученных данных
DWORD dwStatus;
// обнуляем структуру SRB_ExecSCSICmd и буфер
memset (SExec, 0, sizeof (SRB_ExecSCSICmd));
memset (byBuff, 0, 100);
// заполняем структуру данными
Exec.SRB_Cmd = SC_EXEC_SCSI_CMD;
Exec.SRB Hald = byAdapter; // как получить значения byAdapter и byTarget // описано во второй главе книги
Exec.SRBJTarget = byTarget;
Exec.SRB Lun = 0;
Exec.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY;
Exec.SRB_BufLen = 100; // размер буфера для данных
Exec.SRB_BufPointer = byBuff; // указатель на буфер данных
Exec.SRB_SenseLen = SENSE_LEN; // размер поля отчета
Exec.SRB PostProc = (LPVOID) hEventASPI; // определяем объект события
Exec.SRB_CDBLen =6;
// размер команды INQUIRY
Exec.CDBByte[0] = SCSI_INQUIRY; // заносим по адресу первого байта
// значение команды INQUIRY (0x12)
Exec.CDBByte[4] = 100;
// заносим по адресу четвертого байта размер буфера
// выполняем команду через ASPI с обработкой ожидания
for (int i = 1; i < 2; i++)
{
// создаем объект события
hEventASPI = CreateEvent (NULL, TRUE, FALSE, NULL);
ResetEvent (hEventASPI);
dwStatus = SendASPI32Command ( (LPSRB) SExec);
// выполняем команду ASPI
if (dwStatus = = SS_COMP)
// если команда завершена, выходим из цикла
break;
}
if (dwStatus = = SS_PENDING) // если команда выполняется, ждем
{
if (WAIT_TIMEOUT != WaitForSingleObject (hEventASPI, INFINITE)) {
CloseHandle {hEventASPI);
break;
}
}
}
// если команда выполнена без ошибок, извлекаем из буфера имя устройства
if (Exec.SRB_Status = = SS_COMP)
{
for (int j = 8; j < 36; j++)
{
buffer[i-8] =byBuff[i];
}
buffer [28] = NULL;
}
return Exec.SRB_Status;
Материал похожий на Пример использования команды INQUIRY
- Пример использования команды COPY
- Пример использования команды INQUIRY
- Пример использования команды COPY
- Пример использования команды SC_ABORT_SRB
Навигация
Сейчас на сайте
Сейчас на сайте 0 пользователей и 1 гость.
Статистика
Всего материалов: 1387