;===============================================================================
;
; Function Name:   _GetMountedUSB_Drives
; Description::    Ermittelt aktuell gemountete USB-Laufwerke
; Parameter(s):    None
; Requirement(s):  #include <string.au3>
; Return Value(s): 2D-Array
;                     Array[0][0] = Anzahl gemounteter USB-Laufwerke
;                     Array[n][0] = Laufwerk - Buchstabe
;                     Array[n][1] = Bezeichnung
; Note:            Erkennt alle gemounteten USB-Sticks, 
;                  USB-Festplatten werden erkannt, wenn sie als "Wechseldatenträger"
;                  im System registriert sind.
; Author(s):       BugFix (bugfix@autoit.de)
;
;===============================================================================
#include <string.au3>
Func _GetMountedUSB_Drives()
	Local $aUSB_Drives[1][2]=[[0]]
	$var = DriveGetDrive( "Removable" )
	For $i = 1 To UBound($var) -1
		$reg = RegRead('HKLM\SYSTEM\MountedDevices', '\DosDevices\' & $var[$i])
		$val = ''
		For $k = 1 To StringLen($reg) - 2 Step 2
			$tmp = _HexToString(StringMid($reg, $k, 2))
			If $tmp <> "" Then
				$val = $val & $tmp
			EndIf
		Next
		$prefix = StringSplit($val, '#')
		If StringRight($prefix[3], 2) == 'RM' Then
			$prefix = StringTrimRight($prefix[3], 3)
			For $l= 1 to 100
				$val = RegEnumKey('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR', $l)
				If @error <> 0 then ExitLoop
				For $n = 1 To 20
					$sub = RegEnumKey('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val, $n)
					If @error <> 0 then ExitLoop
					If RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val & '\' & $sub, 'ParentIdPrefix') == $prefix Then
						If DriveGetFileSystem($var[$i] & '\') Then
							ReDim $aUSB_Drives[UBound($aUSB_Drives)+1][2]
							$aUSB_Drives[0][0] += 1
							$aUSB_Drives[UBound($aUSB_Drives)-1][0] = StringUpper($var[$i])
							$aUSB_Drives[UBound($aUSB_Drives)-1][1] = _
								RegRead('HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR\' & $val & '\' & $sub, 'FriendlyName')
							ExitLoop
						EndIf
					EndIf
				Next
			Next
		EndIf
	Next
	Return $aUSB_Drives
EndFunc ;_GetMountedUSB_Drives
