Dear,additional to Bryce code you must also check which drive letters are
locally mapped. so you don't want a direct read request to a cdrom
drive without a cdrom in it.
the information of cdrom are available by your registry. they must not only
tell: have I a cdrom drive?, but also which drive-letter has
been assigned to it.
for Windows9x you can get the information by reading the registry
key: "HKEY_LOCAL_MACHINE\Enum\SCSI".
it gives you an answer not only about cdrom drives but also other
disk-drives.
for Windows NT you only can get the information about cdrom drives,
because the disk-drive information can not be read by a kixtart
command. the HKCC contains those information.
code:
IF setconsole("hide")
ENDIF
;
; NT/95 logging - Kixtart 3.62
;
; (c) scripting@wanadoo.nl - 2000
;
; 1.00 (20000815) original version - read disk/cdrom information
;
$debug_mode="yes"
IF ($debug_mode = "yes")
IF (RedirectOutput("kix-info.txt",1) = 0)
ENDIF
ENDIF
;
IF (@inwin = 1)
$NT_mode="yes"
ELSE
$NT_mode="no"
ENDIF
;
$fix_disk=""
$fix_cdrom="" ; ----- HKLM hardware configuration - local hardware - 95 -----
$execute_mode="yes"
IF ($NT_mode = "yes")
$execute_mode="no"
ENDIF
IF ($execute_mode = "yes")
$ikey="HKEY_LOCAL_MACHINE\Enum\SCSI" ; - 95 -
IF (ExistKey($ikey) = 0)
$completed="no"
$index=0
DO
$icode=ENUMKEY($ikey, $index)
IF (@error = 0)
IF ($debug_mode = "yes")
? $ikey+"\"+$icode
ENDIF
IF (len($icode) <> 0)
$completed1="no"
$index1=0
$ikey1=$ikey+"\"+$icode
DO
$icode1=ENUMKEY($ikey1, $index1)
IF (@error = 0)
$ikey2=$ikey1+"\"+$icode1
$icode2=ReadValue($ikey2, "Class")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " Class ="+$icode2
ENDIF
IF (LCASE($icode2) = "cdrom")
$fix_cdrom=$fix_cdrom+ReadValue($ikey2, "CurrentDriveLetterAssignment")
ENDIF
$icode2=ReadValue($ikey2, "CurrentDriveLetterAssignment")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " CurrentDriveLetterAssignment="+$icode2
ENDIF
ENDIF
$icode2=ReadValue($ikey2, "UserDriveLetterAssignment")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " User DriveLetterAssignment="+$icode2
ENDIF
ENDIF
$icode2=ReadValue($ikey2, "DeviceDesc")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " DeviceDesc ="+$icode2
ENDIF
ENDIF
$icode2=ReadValue($ikey2, "IDEMaster")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " IDEMaster ="+$icode2
ENDIF
ENDIF
ENDIF
ELSE
$completed1="yes"
ENDIF
$index1=$index1+1
UNTIL ($completed1 = "yes")
ENDIF
ELSE
$completed="yes"
ENDIF
$index=$index+1
UNTIL ($completed = "yes")
ENDIF
; ----- HKLM hardware configuration - local hardware - NT -----
$ikey="HKEY_LOCAL_MACHINE\Enum\ESDI" ; - 95 -
IF (ExistKey($ikey) = 0)
$completed="no"
$index=0
DO
$icode=ENUMKEY($ikey, $index)
IF (@error = 0)
IF ($debug_mode = "yes")
? $ikey+"\"+$icode
ENDIF
IF (len($icode) <> 0) AND (INSTR(LCASE($icode),"generic") <> 0)
$completed1="no"
$index1=0
$ikey1=$ikey+"\"+$icode
DO
$icode1=ENUMKEY($ikey1, $index1)
IF (@error = 0)
$ikey2=$ikey1+"\"+$icode1
$icode2=ReadValue($ikey2, "Class")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " Class ="+$icode2
ENDIF
IF (LCASE($icode2) = "diskdrive")
$fix_disk=$fix_disk+ReadValue($ikey2, "CurrentDriveLetterAssignment")
ENDIF
$icode2=ReadValue($ikey2, "CurrentDriveLetterAssignment")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " CurrentDriveLetterAssignment="+$icode2
ENDIF
ENDIF
$icode2=ReadValue($ikey2, "UserDriveLetterAssignment")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " User DriveLetterAssignment="+$icode2
ENDIF
ENDIF
$icode2=ReadValue($ikey2, "DeviceDesc")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " DeviceDesc ="+$icode2
ENDIF
ENDIF
$icode2=ReadValue($ikey2, "IDEMaster")
IF (@error = 0)
ENDIF
IF (len($icode2) <> 0)
IF ($debug_mode = "yes")
? " IDEMaster ="+$icode2
ENDIF
ENDIF
ENDIF
ELSE
$completed1="yes"
ENDIF
$index1=$index1+1
UNTIL ($completed1 = "yes")
ENDIF
ELSE
$completed="yes"
ENDIF
$index=$index+1
UNTIL ($completed = "yes")
ENDIF
$fix_cdrom=LCASE($fix_cdrom)
$fix_disk=LCASE($fix_disk)
IF ($debug_mode = "yes")
? " summary: User Disk ="+$fix_disk
? " CDrom="+$fix_cdrom
ENDIF
IF (len($fix_disk) <> 0)
? "disk=("+$fix_disk+")"
ELSE
? "disk=(?)"
ENDIF
IF (len($fix_cdrom) <> 0)
? "cdrom=("+$fix_cdrom+")"
ELSE
? "cdrom=(?)"
ENDIF
ENDIF
; ----- HKLM services configuration - NT -----
; - CDrom active ? - NT: IDE / remark: disk-drives only locatable by HKCC registry. not readable by kixtart -
$execute_mode="yes"
IF ($NT_mode <> "yes")
$execute_mode="no"
ENDIF
IF ($execute_mode = "yes")
IF ($NT_mode = "yes")
$ikey="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_CDROM\0000\Control"
IF (ExistKey($ikey) = 0) ; - NT -
$ivalue=ReadValue($ikey, "ActiveService")
IF (@error = 0)
;
$ikey="HKEY_LOCAL_MACHINE\SYSTEM\DISK"
IF (ExistKey($ikey) = 0)
$ivalue=ReadValue($ikey, "\Device\CdRom0")
IF (@error = 0)
$fix_cdrom=LCASE(substr($ivalue,1,1))
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
;
IF (len($fix_cdrom) <> 0)
? "cdrom=("+$fix_cdrom+")"
ELSE
? "cdrom=(?)"
ENDIF
ENDIF
Information created by $debug_mode="yes" on windows 9x:
code:
HKEY_LOCAL_MACHINE\Enum\SCSI\MATSHITACD-R___CW-7501__1
Class =CDROM
CurrentDriveLetterAssignment=J
User DriveLetterAssignment=JJ
DeviceDesc =Philips CD-R
HKEY_LOCAL_MACHINE\Enum\SCSI\IOMEGA__ZIP_100_________2
Class =DiskDrive
CurrentDriveLetterAssignment=X
User DriveLetterAssignment=XX
DeviceDesc =IOMEGA ZIP 100
HKEY_LOCAL_MACHINE\Enum\ESDI\GENERIC_IDE__DISK_TYPE47_
Class =DiskDrive
CurrentDriveLetterAssignment=CE
DeviceDesc =GENERIC IDE DISK TYPE47
IDEMaster =01
Class =DiskDrive
CurrentDriveLetterAssignment=DF
DeviceDesc =GENERIC IDE DISK TYPE47
HKEY_LOCAL_MACHINE\Enum\ESDI\VIRTUAL__CD-ROM_DRIVE____
summary: User Disk =cedf
CDrom=j
disk=(cedf)
cdrom=(j)
code available also on http://home.wanadoo.nl/scripting
Greetings.
[This message has been edited by MCA (edited 17 August 2000).]