Что нового

Как узнать вид CDROMa: виртуальный или физический

Pat4005

Новичок
Сообщения
85
Репутация
4
Пишу свою первую программку, которая должна уметь управлять дисководами. но в первую очередь она должна узнать какими приводами нужно управлять. DriveGetType всего лишь показывает что выбранный диск является сидиромом. вот и не могу понять каким именно: физическим или виртуальным.. помогите.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Большинство эмуляторов CD/DVD цепляются как SCSI-устройства. Другого способа на ум не приходит. Виртуальный диск практически ничем не отличается от физического и использует свой драйвер. Возможно еще определить по производителям программ эмуляторов. Еще можно послать команду на открытие лотка, если это произойдет слишком быстро, то скорее всего это виртуальный диск. В любом случае не нужно делать различия между виртуальными и физическими устройствами.

Кстати, добро пожаловать на форум.
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
Виртуальные на то и созданы, чтоб обманывать программы (в частности даемон тулс) и по этому они стараются не отличаться.
Неверное следует сделать такой функционал: при первом запуске программа спрашивает у пользователя какие диски являются виртуальными и сохраняет их в ini файл, в дальнейшем определять исходя из этого ini
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ynbIpb
я бы предложил скорее спрашивать какие приводы являются настоящими. вероятность их смены куда ниже чем вероятность смены виртуальных и их букв
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Вот пример для определения интерфейса устройств. Если честно, то SCSI CD/DVD девайсы я встречал всего один раз на MAC'е и очень давно, когда еще не было SATA интерфейсов. А все известные мне эмуляторы используют именно SCSI интерфейс.

Код:
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global $Bus, $Text, $Drive = DriveGetDrive('ALL')

For $i = 1 To $Drive[0]
	$Bus = _WinAPI_GetDriveBusType($Drive[$i])
	Switch $Bus
		Case $DRIVE_BUS_TYPE_UNKNOWN
			$Text = 'UNKNOWN'
		Case $DRIVE_BUS_TYPE_SCSI
			$Text = 'SCSI'
		Case $DRIVE_BUS_TYPE_ATAPI
			$Text = 'ATAPI'
		Case $DRIVE_BUS_TYPE_ATA
			$Text = 'ATA'
		Case $DRIVE_BUS_TYPE_1394
			$Text = '1394'
		Case $DRIVE_BUS_TYPE_SSA
			$Text = 'SSA'
		Case $DRIVE_BUS_TYPE_FIBRE
			$Text = 'FIBRE'
		Case $DRIVE_BUS_TYPE_USB
			$Text = 'USB'
		Case $DRIVE_BUS_TYPE_RAID
			$Text = 'RAID'
		Case $DRIVE_BUS_TYPE_ISCSI
			$Text = 'ISCSI'
		Case $DRIVE_BUS_TYPE_SAS
			$Text = 'SAS'
		Case $DRIVE_BUS_TYPE_SATA
			$Text = 'SATA'
		Case $DRIVE_BUS_TYPE_SD
			$Text = 'SD'
		Case $DRIVE_BUS_TYPE_MMC
			$Text = 'MMC'
	EndSwitch
	ConsoleWrite(StringUpper($Drive[$i]) & ' => ' & $Text & @CR)
Next


WinAPIEx.au3
 
Верх