Статьи по программированию
примеры программного кода
Delphi, Kylix, C, C++, SQL, Visual Basic, Bash, Assembler, 1С
Qt, KOL, MFC, Rx Library, Windows, Linux, Mac OS
Определение типа устройства
Опубликовано codeLocker в 22.08.2008 в 06:36.
'Определение типа устройства
' объявляем константы
Private Const SC_HA_INQUIRY = &Н0
Private Const SC_GET_DEV_TYPE = &H1
Private Const SS_COMP = &H1
Private Const DTYPE_DASD = 0
Private Const DTYPE_SEQD = 1
Private Const DTYPE_PRNT = 2
Private Const DTYPE_PROC = 3
Private Const DTYPE_WORM = 4
Private Const DTYPE_CDROM = 5
Private Const DTYPE_SCAN = 6
Private Const DTYPE_OPTI = 7
Private Const DTYPE_JUKE = 8
Private Const DTYPE_COMM = 9
Private Const DTYPE_UNKNOWN = &H1F
' объявляем структуры SRB_HAInquiry и SRB_GDEVBlock
Private Type SRB_HAInquiry
SRB_Cmd As Byte
SRB_Status As Byte
SRB_HaId As Byte
SRB_Flags As Byte
SRB_Hdr_Rsvd As Long
HA_Count As Byte
HA_Id As Byte
HA__MgrId As String * 16
HA_Ident As String * 16
HA_Unique(15) As Byte
HA_Rsvd As Integer
End Type
Private Type SRB_GDEVBlock
SRB_Cmd As Byte
SRB_Status As Byte
SRB_HaId As Byte
SRB_Flags As Byte
SRB_Hdr_Rsvd As Long
SRB_Target As Byte
SRB_Lun As Byte
SRB_DeviceType As Byte
SRB_Rsvdl As Byte
End Type
' объявляем функции
Private Declare Function GetASPI32SupportInfo Lib "Wnaspi32" () As Long Private Declare Function SendASPl32Command Lib "Wnaspi32" _ (haSRB As SRB_HAInquiry) As Long
' пишем свою функцию
Public Function GetDeviceType() As Boolean
Dim numDevice As Integer, iDevice As Integer
Dim Inquiry As SRB_HAInquiry
Dim DevType As SRB_GDEVBlock
Dim IResult As Long
Dim nStatus as Integer
Dim iDev As Integer, iLun As Integer
IResult = GetASPI32SupportInfo() nStatus = IResult / 256
' если все хорошо, получаем количество установленных устройств
If (nStatus = SS_COMP) Then numDevice = IResult And &HF
' получаем данные обо всех установленных контроллерах
For iDevice = 0 То numDevice
' заполняем структуру
Inquiry.SRB_Cmd = SC_HA_INQUIRY
Inquiry.Hald = iDevice
Inquiry.SRB_Flags = 0
Inquiry.SRB_Hdr_Rsvd = 0
IResult = SendASPI32Command(Inquiry)
'проверяем возвращаемое значение
If(Inquiry.SRB_Status <> SS_COMP) Then GoTo skipDevice
' определяем тип устройства
For iDev = 0 To 7 For iLun = 0 To 1
'заполняем структуру
SRB_GDEVBlock DevType.SRB_Cmd = SC_GET_DEV_TYPE
DevType.SRB_HaId = iDevice
DevType.SRB_Flags = 0
DevType.SRB_Hdr_Rsvd = 0
DevType.SRBJTarget = iDev
DevType.SRB_Lun = iLun
IResult = SendASPI32Command(DevType)
If (DevType.SRB_Status <> SS_COMP) Then GoTo skipDev
' определяем тип устройства
Select Case DevType.SRB_DeviceType
Case DTYPE_DASD
'дисковый накопитель
' обрабатываем значение, если нужно
Case DTYPE_SEQD
'устройство записи на пленку
' обрабатываем значение, если нужно
Case DTYPE_PRNT
'принтер
' обрабатываем значение, если нужно
Case DTYPE_PROC 'процессор
' обрабатываем значение, если нужно
Case DTYPE_WORM 'устройство одноразовой записи
' обрабатываем значение, если нужно
Case DTYPE_CDROM 'CD-ROM
' обрабатываем значение, если нужно
Case DTYPE SCAN
' обрабатываем значение, если нужно
Case DTYPE_OPTI 'оптическое устройство записи
' обрабатываем значение, если нужно
Case DTYPE_JUKE ' устройство преобразования
' обрабатываем значение, если нужно
Case DTYPE_COMM ' устройство связи
' обрабатываем значение, если нужно
Case DTYPE_UNKNOWN ' неизвестный тип устройства
' обрабатываем значение, если нужно
End Select
skipDev:
Next iLun
Next iDev
skipDevice:
Next iDevice
GetDeviceType = True ' функция выполнена успешно
End Function
'Определение типа устройства
' объявляем константы
Private Const SC_HA_INQUIRY = &Н0
Private Const SC_GET_DEV_TYPE = &H1
Private Const SS_COMP = &H1
Private Const DTYPE_DASD = 0
Private Const DTYPE_SEQD = 1
Private Const DTYPE_PRNT = 2
Private Const DTYPE_PROC = 3
Private Const DTYPE_WORM = 4
Private Const DTYPE_CDROM = 5
Private Const DTYPE_SCAN = 6
Private Const DTYPE_OPTI = 7
Private Const DTYPE_JUKE = 8
Private Const DTYPE_COMM = 9
Private Const DTYPE_UNKNOWN = &H1F
' объявляем структуры SRB_HAInquiry и SRB_GDEVBlock
Private Type SRB_HAInquiry
SRB_Cmd As Byte
SRB_Status As Byte
SRB_HaId As Byte
SRB_Flags As Byte
SRB_Hdr_Rsvd As Long
HA_Count As Byte
HA_Id As Byte
HA__MgrId As String * 16
HA_Ident As String * 16
HA_Unique(15) As Byte
HA_Rsvd As Integer
End Type
Private Type SRB_GDEVBlock
SRB_Cmd As Byte
SRB_Status As Byte
SRB_HaId As Byte
SRB_Flags As Byte
SRB_Hdr_Rsvd As Long
SRB_Target As Byte
SRB_Lun As Byte
SRB_DeviceType As Byte
SRB_Rsvdl As Byte
End Type
' объявляем функции
Private Declare Function GetASPI32SupportInfo Lib "Wnaspi32" () As Long Private Declare Function SendASPl32Command Lib "Wnaspi32" _ (haSRB As SRB_HAInquiry) As Long
' пишем свою функцию
Public Function GetDeviceType() As Boolean
Dim numDevice As Integer, iDevice As Integer
Dim Inquiry As SRB_HAInquiry
Dim DevType As SRB_GDEVBlock
Dim IResult As Long
Dim nStatus as Integer
Dim iDev As Integer, iLun As Integer
IResult = GetASPI32SupportInfo() nStatus = IResult / 256
' если все хорошо, получаем количество установленных устройств
If (nStatus = SS_COMP) Then numDevice = IResult And &HF
' получаем данные обо всех установленных контроллерах
For iDevice = 0 То numDevice
' заполняем структуру
Inquiry.SRB_Cmd = SC_HA_INQUIRY
Inquiry.Hald = iDevice
Inquiry.SRB_Flags = 0
Inquiry.SRB_Hdr_Rsvd = 0
IResult = SendASPI32Command(Inquiry)
'проверяем возвращаемое значение
If(Inquiry.SRB_Status <> SS_COMP) Then GoTo skipDevice
' определяем тип устройства
For iDev = 0 To 7 For iLun = 0 To 1
'заполняем структуру
SRB_GDEVBlock DevType.SRB_Cmd = SC_GET_DEV_TYPE
DevType.SRB_HaId = iDevice
DevType.SRB_Flags = 0
DevType.SRB_Hdr_Rsvd = 0
DevType.SRBJTarget = iDev
DevType.SRB_Lun = iLun
IResult = SendASPI32Command(DevType)
If (DevType.SRB_Status <> SS_COMP) Then GoTo skipDev
' определяем тип устройства
Select Case DevType.SRB_DeviceType
Case DTYPE_DASD
'дисковый накопитель
' обрабатываем значение, если нужно
Case DTYPE_SEQD
'устройство записи на пленку
' обрабатываем значение, если нужно
Case DTYPE_PRNT
'принтер
' обрабатываем значение, если нужно
Case DTYPE_PROC 'процессор
' обрабатываем значение, если нужно
Case DTYPE_WORM 'устройство одноразовой записи
' обрабатываем значение, если нужно
Case DTYPE_CDROM 'CD-ROM
' обрабатываем значение, если нужно
Case DTYPE SCAN
' обрабатываем значение, если нужно
Case DTYPE_OPTI 'оптическое устройство записи
' обрабатываем значение, если нужно
Case DTYPE_JUKE ' устройство преобразования
' обрабатываем значение, если нужно
Case DTYPE_COMM ' устройство связи
' обрабатываем значение, если нужно
Case DTYPE_UNKNOWN ' неизвестный тип устройства
' обрабатываем значение, если нужно
End Select
skipDev:
Next iLun
Next iDev
skipDevice:
Next iDevice
GetDeviceType = True ' функция выполнена успешно
End Function
'Определение типа устройства
Материал похожий на Определение типа устройства
- Определение типа устройства
- Получение информации о контроллерах
- Обработка команды ASPI методом опроса
- Получение информации о контроллерах
- Определение установленных версий .NET Framework в системе
Метки
visual basic преобразование типов visual basic select case visual basic goto преобразование типов данных оптический драйвер устройство bios устройство dvd rom dvd rom определяется как cd rom scsi cd scsi устройства scsi cdrom драйвер скачать scsi flash ide устройства ide flash ide scan
Навигация
Сейчас на сайте
Сейчас на сайте 0 пользователей и 2 гостя.
Статистика
Всего материалов: 1387