WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

System UDFs

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Get Media Type of CD ROM


 keywords: Detect disc type cd  dvd
#DefineFunction GetMediaType(DriveLetterAndColon)
   ;IntControl(73, 1, 0, 0, 0)
   INVALID_HANDLE_VALUE = -1
   OPEN_EXISTING = 3
   FILE_SHARE_WRITE = 2
   FILE_SHARE_READ = 1
   GENERIC_READ = 2147483648
   GENERIC_WRITE = 1073741824
   GET_MEDIA_TYPES_EX = 2952196

   ;DriveLetterAndColon should be two characters WITHOUT a trailing
   ;backslash, ex: "D:"

   ;Returns media type value

   ;CreateFile will probably fail on Win9x systems so this function is only intended for use on NT 4 and greater
   drivepath = StrCat("\\.\", DriveLetterAndColon)
   DaDll=StrCat(DirWindows(1),"kernel32.dll")
   hDrive=DllCall(DaDll,long:"CreateFileA",lpstr:drivepath,long:GENERIC_READ|GENERIC_WRITE,long:FILE_SHARE_READ|FILE_SHARE_WRITE,lpnull, long:OPEN_EXISTING, long:0, lpnull)
   LastErr = DllLastError()
   If hDrive <> INVALID_HANDLE_VALUE
       size = 4096
       lpMediaTypes= BinaryAlloc(size)
       lpBytesReturned = BinaryAlloc(4)
       BinaryEodSet(lpMediaTypes, size)
       status = DllCall(DaDll,long:"DeviceIoControl",long:hDrive, long:GET_MEDIA_TYPES_EX, lpnull, long:0, lpbinary:lpMediaTypes, long:size, lpbinary:lpBytesReturned, lpnull)
       LastErr = DllLastError()
       devicetype = BinaryPeek4(lpMediaTypes, 0 )
       BinaryFree(lpMediaTypes)
       BinaryFree(lpBytesReturned)
       DllCall(DaDll,long:"CloseHandle",long:hDrive)  ;Clean up after outselves
       Return devicetype
   EndIf
   Return 0

   :WBERRORHANDLER
   If IsDefined(hDrive) Then DllCall(DaDll,long:"CloseHandle",long:hDrive)
   If IsDefined(lpLock) Then BinaryFree(lpLock)
   If IsDefined(lpReturnedBytes) Then BinaryFree(lpReturnedBytes)
   Message("Error Occured on line",wberrorhandlerline)
   Return 0

#EndFunction

;These values need to be convered from HEX to Decimal
;FILE_DEVICE_8042_PORT           = 00000027
;FILE_DEVICE_ACPI                = 00000032
;FILE_DEVICE_BATTERY             = 00000029
;FILE_DEVICE_BEEP                = 00000001
;FILE_DEVICE_BUS_EXTENDER        = 0000002a
;FILE_DEVICE_CD_ROM              = 00000002
;FILE_DEVICE_CD_ROM_FILE_SYSTEM  = 00000003
;FILE_DEVICE_CHANGER             = 00000030
;FILE_DEVICE_CONTROLLER          = 00000004
;FILE_DEVICE_DATALINK            = 00000005
;FILE_DEVICE_DFS                 = 00000006
;FILE_DEVICE_DFS_FILE_SYSTEM     = 00000035
;FILE_DEVICE_DFS_VOLUME          = 00000036
;FILE_DEVICE_DISK                = 00000007
;FILE_DEVICE_DISK_FILE_SYSTEM    = 00000008
;FILE_DEVICE_DVD                 = 00000033
;FILE_DEVICE_FILE_SYSTEM         = 00000009
;FILE_DEVICE_FIPS                = 0000003a
;FILE_DEVICE_FULLSCREEN_VIDEO    = 00000034
;FILE_DEVICE_INPORT_PORT         = 0000000a
;FILE_DEVICE_KEYBOARD            = 0000000b
;FILE_DEVICE_KS                  = 0000002f
;FILE_DEVICE_KSEC                = 00000039
;FILE_DEVICE_MAILSLOT            = 0000000c
;FILE_DEVICE_MASS_STORAGE        = 0000002d
;FILE_DEVICE_MIDI_IN             = 0000000d
;FILE_DEVICE_MIDI_OUT            = 0000000e
;FILE_DEVICE_MODEM               = 0000002b
;FILE_DEVICE_MOUSE               = 0000000f
;FILE_DEVICE_MULTI_UNC_PROVIDER  = 00000010
;FILE_DEVICE_NAMED_PIPE          = 00000011
;FILE_DEVICE_NETWORK             = 00000012
;FILE_DEVICE_NETWORK_BROWSER     = 00000013
;FILE_DEVICE_NETWORK_FILE_SYSTEM = 00000014
;FILE_DEVICE_NETWORK_REDIRECTOR  = 00000028
;FILE_DEVICE_NULL                = 00000015
;FILE_DEVICE_PARALLEL_PORT       = 00000016
;FILE_DEVICE_PHYSICAL_NETCARD    = 00000017
;FILE_DEVICE_PRINTER             = 00000018
;FILE_DEVICE_SCANNER             = 00000019
;FILE_DEVICE_SCREEN              = 0000001c
;FILE_DEVICE_SERENUM             = 00000037
;FILE_DEVICE_SERIAL_MOUSE_PORT   = 0000001a
;FILE_DEVICE_SERIAL_PORT         = 0000001b
;FILE_DEVICE_SMARTCARD           = 00000031
;FILE_DEVICE_SMB                 = 0000002e
;FILE_DEVICE_SOUND               = 0000001d
;FILE_DEVICE_STREAMS             = 0000001e
;FILE_DEVICE_TAPE                = 0000001f
;FILE_DEVICE_TAPE_FILE_SYSTEM    = 00000020
;FILE_DEVICE_TERMSRV             = 00000038
;FILE_DEVICE_TRANSPORT           = 00000021
;FILE_DEVICE_UNKNOWN             = 00000022
;FILE_DEVICE_VDM                 = 0000002c
;FILE_DEVICE_VIDEO               = 00000023
;FILE_DEVICE_VIRTUAL_DISK        = 00000024
;FILE_DEVICE_WAVE_IN             = 00000025
;FILE_DEVICE_WAVE_OUT            = 00000026



;Grab CDROM Drive letter
CDROMLIST = DiskScan (8)
CDROM = ItemExtract(1,CDROMLIST,@TAB)
ret = GetMediaType(CDROM)
Pause(CDROM,StrCat("Type = ",ret))

Exit


Article ID:   W17281
File Created: 2008:02:04:11:31:38
Last Updated: 2008:02:04:11:31:38