Hy Leute,
dieses Script habe ich ursprünglich geschrieben um eine Truecrypt Partition von einer USB-Platte /USB-Stick einfacher einzubinden. (Was jetz alles geht seht ihr in der VersionsInfo!)
Danach wird automatisch Software von dieser Truecrypt Partition gestartet und über das TrayIcon kann man die Partition wieder aushängen. Hierbei werden automatisch alle von der Partition gestarteten Programme geschlossen.
Inzwischen habe ichs schon öfter überarbeitet, jedoch sind einige Funktionen noch nicht ausgereift.
Für Hilfe, Wünsche und Anregungen bin ich immer offen.
Update vom 1. Dez.08:
Aktuelle Version=0.0.0.69
Hier die Funktionsweise:
Spoiler anzeigen
Nochmal wie des bei mir funktioniert:
USB Festplatte angesteckt, den ordner truecrypt raufkopiert,Des Script (kompiliert oder nicht) ins rootverzeichniss der Platte kopieren, Automounter gestartet ---> Der erstellt jetz eine Beispieldatei mit dem Namen "Autorun.inf"
Die muss man nun abändern (wurde auch missbraucht um meine ini einstellungen zu sichern) --> Es gibt wie bei Truecrypt den Modus eine Partition einzubinden oder ne Datei. Im Partitionsmodus muss man angeben welche partition eingebunden werden soll. z.B.2. Beim cotainer sollte es der relative pfad zur Containerdatei sein....
Beim nächsten start fragt das Programm nur noch nach dem Passwort, alle anderen infos nimmt es aus der INF oder
sucht sie sich selbst.
Update: Ganze Festplatten oder Partitionen werden nun anhand einer ID erkannt. Diese könnt ihr mit dem Tool harddiskinfo herausfinden.
(Zukünftig baue ich dafür eine GUI zum konfigurieren!)
Nach dem mounten erstellt das Prog auf dem entschlüsselten laufwerk eine Datei mit dem namen autorun.ini. (Nur wenn Autorun=TRUE in der Autorun.inf eingetragen ist)
Die dort eingetragenen Programme (relative Pfade) werden automatisch gestartet.
Im TrayIcon (rechtsklick) gibts dann noch einen Checkdisk und eine Dismountfunktion die alle vom entschüsselten laufwerk geöffneten programme schliesst, befor das Laufwerk verschlüsselt oder gecheckt wird.
Achso nochn Tipp: in der Autorun.inf unter [Settings] DEBUG=TRUE liefert eine gute Logdatei !!
Hier der Quellcode:
Spoiler anzeigen
#Region
#AutoIt3Wrapper_Outfile=Automounter.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Description=Autoencrypter für transportable Truecrypt Medien
#AutoIt3Wrapper_Res_Fileversion=0.0.0.69
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=GPL
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Run_Tidy=y
#EndRegion
;Neme: Truecrypt Automounter
;Author: Merlink
;E-Mail: [email='Merlink@gmx.de'][/email]
;Quellcode: http://www.autoit.de/index.php?page=Thread&threadID=8625
;License: GPL
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;Includes
#include<Array.au3>
#include<Constants.au3>
#include<Date.au3>
#include<EditConstants.au3>
#include<GUIConstantsEx.au3>
#include<EditConstants.au3>
#include<GUIConstantsEx.au3>
#include<Inet.au3>
#include<Misc.au3>
#include<String.au3>
#include<WindowsConstants.au3>
;Disable Doublestart
If _Singleton(@ScriptName, 1) = 0 Then
MsgBox(0, "Anwendung wird wieder beendet.", "Die Anwendung wurde bereits einmal gestartet. Sollte diese Meldung ständig erscheinen, " & @CR & "starten Sie den PC neu und probieren es nochmal.")
Exit
EndIf
;Define Global Variables
Global $runningdrive = StringLeft(@ScriptDir, 2) & "\"
Global $logfile = @ScriptDir & StringTrimRight(@ScriptName, 4) & ".log"
Global $inifile1 = _ini(1)
Global $debug = IniRead($inifile1, "SETTINGS", "DEBUG", "FALSE") ;Standart: DEBUG OFF
FileDelete($logfile)
_debug("Programname=" & @ScriptName)
_debug("Programversion=" & FileGetVersion(@ScriptFullPath))
_debug("Info: Runningdrive=" & $runningdrive)
_debug("Info: Inifile1=" & $inifile1)
Global $tcpath = _cleanpath(_findtruecrypt())
Global $dimension = 20
Global $drives[2][$dimension]
;First actions:
_dismount("all")
_RefreshSystemTray()
;Filling Array with Infos
$drives[0][1] = 0
$drives[0][2] = "Mountpoint"
$drives[0][3] = "Mountmode"
$drives[0][4] = "Keyfile"
$drives[0][5] = "Password"
;Start Mountloop
Dim $count1 = 1
While 1
$INI = IniReadSection($inifile1, "Drive" & $count1)
If @error Then ExitLoop
_debug("break")
_debug("*****Try to mount Drive" & $count1 & "*****")
;Readout StandardDriveletter
$arrayplace = _ArraySearch($INI, "StandardDriveLetter", 0, 0, 0, 1, 0)
If @error Then
_debug("Info: Standarddriveletter: Entry Not Found (using default=x:)")
$Driveletter = _driveletter("x:")
$drives[$count1][1] = $Driveletter
Else
$Driveletter = _driveletter($INI[$arrayplace][1])
$drives[$count1][1] = $Driveletter
EndIf
;Ask for Password
$arrayplace = _ArraySearch($INI, "PasswordRequired", 0, 0, 0, 1, 0)
If @error Then
$drives[$count1][5] = "OFF"
_debug("Info: Password=OFF (Entry Not Found)")
Else
If $INI[$arrayplace][1] = "TRUE" Then
_debug("Info: Password=ON")
$password = _getpass()
$drives[$count1][5] = "ON"
Else
$drives[$count1][5] = "OFF"
_debug("Info: Password=OFF")
EndIf
EndIf
;Search for Keyfile
$arrayplace = _ArraySearch($INI, "Keyfile", 0, 0, 0, 1, 0)
If @error Then
_debug("Info: Keyfile=OFF (Entry Not Found)")
$drives[$count1][4] = "OFF"
Else
$Keyfile = $INI[$arrayplace][1]
If @error Then
_debug("Info: Keyfile=OFF")
$drives[$count1][4] = "OFF"
Else
_debug("Info: Keyfile=ON")
$Keyfile = _findfile($Keyfile)
ReDim $drives[$count1 + 1][$dimension]
$drives[$count1][4] = $Keyfile
EndIf
EndIf
;Checking for Mountmode
$arrayplace = _ArraySearch($INI, "Mode", 0, 0, 0, 1, 0)
If @error Then
_debug("Mode is not defined, using Container as default!")
$mode = "Container"
Else
$mode = $INI[$arrayplace][1]
EndIf
Select
Case $mode = "Partition"
$drives[$count1][3] = "Partition"
;Mounting Partition
_debug("break")
_debug("!Mode: PartitionMode")
$Harddisk = "\Device\Harddisk" & _SignatureToHarddisk($INI[_ArraySearch($INI, "HarddiskID", 0, 0, 0, 1, 0)][1]) & "\Partition" & $INI[_ArraySearch($INI, "PartitionNumber", 0, 0, 0, 1, 0)][1]
$drives[$count1][2] = $Harddisk
$cmd = $tcpath & " /q /b /v " & $Harddisk & " /l " & $Driveletter
If $drives[$count1][4] <> "OFF" Then $cmd = $cmd & " /k " & $Keyfile
If $drives[$count1][5] = "ON" Then $cmd = $cmd & " /p " & $password
Run($cmd, @TempDir)
Case $mode = "Container"
$drives[$count1][3] = "Container"
;Mounting File
_debug("break")
_debug("!Mode: ContainerMode")
$Container = _findfile($INI[_ArraySearch($INI, "Containerfile", 0, 0, 0, 1, 0)][1])
$drives[$count1][2] = $Container
$cmd = $tcpath & " /q /b /v " & $Container & " /l " & $Driveletter
If $drives[$count1][4] <> "OFF" Then $cmd = $cmd & " /k " & $Keyfile
If $drives[$count1][5] = "ON" Then $cmd = $cmd & " /p " & $password
Run($cmd, @TempDir)
Case Else
;No Mountmode Defined
MsgBox(0, "ERROR", "Mode=" & $mode & " sollte Partition oder Container sein!!")
EndSelect
;Checking for Securedrive
Sleep(2000)
$status = DriveStatus($Driveletter)
_debug("break")
_debug("Info: Securdrive status=" & $status)
If $status = "READY" Then
TrayTip("Status", "Mounted Successfully... ", 10, 1)
$drives[$count1][0] = "OK"
$drives[0][1] += 1
Else
ProcessClose("truecrypt.exe")
MsgBox(0, "ERROR", "Auf das Laufwerk kann nicht zugegriffen werden!")
Exit
EndIf
;Autorun
$drives[0][6] = "Autorun"
$arrayplace = _ArraySearch($INI, "Autorun", 0, 0, 0, 1, 0)
If @error Then
_debug("Info: Autorun=OFF (Entry Not Found)")
$drives[$count1][6] = "OFF"
Else
$drives[$count1][6] = "ON"
If $INI[$arrayplace][1] = "TRUE" Then
$inifile2 = _ini(2)
If $inifile2 = "Build" Then
_debug("Autorun=OFF (Build new File)")
Else
_start($inifile2)
EndIf
Else
_debug("Info: Autorun=OFF")
EndIf
EndIf
$count1 += 1
ReDim $drives[$count1 + 1][$dimension]
$drives[0][0] = $count1
WEnd
_debug("break")
_debug("*****Entering Wait Mode*****")
;Create Menue
Opt("TrayMenuMode", 1)
$i = 0
While $i < $drives[0][0]
If $drives[$i][0] = "OK" Then
$drives[$i][10] = TrayCreateMenu("Laufwerk: " & $drives[$i][1])
$drives[$i][11] = TrayCreateItem("Schliesse Laufwerk: " & $drives[$i][1], $drives[$i][10])
$drives[$i][12] = TrayCreateItem("Überprüfe Laufwerk: " & $drives[$i][1], $drives[$i][10])
$drives[$i][13] = TrayCreateItem("")
EndIf
$i += 1
WEnd
;Static Commands
$Dismount = TrayCreateItem("Alle Laufwerke verschlüsseln")
;For Debug:
;_ArrayDisplay($drives)
;Enter action Loop
$i = 0
$Msg = TrayGetMsg()
While 1
;Reset Counter
If $i = $drives[0][0] Then
$i = 0
$Msg = TrayGetMsg()
EndIf
;Exiting if no more mounted Drives
If $drives[0][1] = 0 Then
_debug("No more Mounted Drives! --->Exit")
ExitLoop
EndIf
;Action: Dismount Drives
If $Msg = $Dismount Then
$i = 0
;Ends Tasks from all mounted Driveletters
While 1
If $i = $drives[0][0] Then ExitLoop
If $drives[$i][0] = "OK" Then
_debug("Info: Endtasks=" & $drives[$i][1])
_endtasks($drives[$i][1])
_RefreshSystemTray()
EndIf
$i += 1
WEnd
_dismount("all")
ExitLoop
EndIf
;Action: Dismount Single Drive
If $drives[$i][0] = "OK" Then
If $Msg = $drives[$i][11] Then
_debug("Info: Endtasks=" & $drives[$i][1])
_endtasks($drives[$i][1])
_dismount($drives[$i][1])
TrayItemDelete($drives[$i][10])
TrayItemDelete($drives[$i][13])
$drives[0][1] -= 1
$i = 0
$Msg = TrayGetMsg()
_RefreshSystemTray()
EndIf
;Action: Checkdisk on Single Drive
If $Msg = $drives[$i][12] Then
_debug("Info: Checkdisk=" & $drives[$i][1])
_endtasks($drives[$i][1])
_RefreshSystemTray()
_checkdisk($drives[$i][1])
_start(_cleanpath($drives[$i][1] & "autorun.ini"))
Sleep(5000)
$i = 0
$Msg = TrayGetMsg()
EndIf
EndIf
$i += 1
WEnd
_debug("*****Exiting*****")
[/autoit] [autoit][/autoit] [autoit]Exit
[/autoit] [autoit][/autoit] [autoit]; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Starting checkdisk
; ----------------------------------------------------------------------------
Func _checkdisk($x)
_debug("break")
_debug("-->Enter: Checkdisk")
FileDelete(@TempDir & "\checkdisk.txt")
$part = "unknown"
$type = "unknown"
TrayTip("Status", "Starte: Checkdisk...", 10, 1)
$cmd = @SystemDir & "\chkdsk.exe /f /x " & $x
_debug($cmd)
$PID = Run($cmd, @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
While 1
$line = StdoutRead($PID)
If @error Then ExitLoop
ConsoleWrite($line)
If StringInStr($line, "NTFS") Then $type = "NTFS"
If StringInStr($line, "FAT32") Then $type = "FAT32"
If $type = "NTFS" Then
If StringInStr($line, "Dateien") Then $part = "(1\3)"
If StringInStr($line, "Indizes") Then $part = "(2\3)"
If StringInStr($line, "Sicherheitsbeschreibungen") Then $part = "(3\3)"
If $line <> "" Then TrayTip("Status: ", "Driveletter: " & $x & @CRLF & "Filesystem: " & $type & @CRLF & "Überprüfe: " & $part & @CRLF & @CRLF & $line, 10, 1)
Else
EndIf
WEnd
Sleep(3000)
_debug("<--Exit: Checkdisk")
EndFunc ;==>_checkdisk
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Cleans Paths from wrong user Inputs
; ----------------------------------------------------------------------------
Func _cleanpath($x)
ConsoleWrite(@CR & "Cleanpath_Input: " & $x & @CR)
If StringInStr($x, ":") Then $x = StringReplace($x, ":", ":\")
While 1
If Not StringInStr($x, "\\") Then ExitLoop
$x = StringReplace($x, "\\", "\")
WEnd
While 1
If Not StringInStr($x, "::") Then ExitLoop
$x = StringReplace($x, "::", ":")
WEnd
ConsoleWrite("Cleanpath_Output: " & $x & @CR)
Return $x
EndFunc ;==>_cleanpath
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Writimg debug Output to Logfile and to console
; ----------------------------------------------------------------------------
Func _debug($x)
If $debug = "TRUE" Then
If $x = "break" Then
FileWriteLine($logfile, @CRLF)
ConsoleWrite(@CR)
Else
FileWriteLine($logfile, @HOUR & ":" & @MIN & ":" & @SEC & "= " & $x & @CRLF)
ConsoleWrite($x & @CR)
EndIf
Else
EndIf
EndFunc ;==>_debug
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Dismounts all Truecrypt Devices or a single Device
; ----------------------------------------------------------------------------
Func _dismount($x)
_debug("break")
_debug("-->Enter: Dismount " & $x)
Select
Case $x = "all"
TrayTip("Status", "Dimounting all Drives...", 5, 1)
Run($tcpath & " /q /d /f")
Sleep(2000)
_debug("<--Exit: Dismount")
Case Else
_debug("break")
_debug("-->Enter: Dismount")
TrayTip("Status", "Dimounting: " & $x, 5, 1)
Run($tcpath & " /q /f /d " & StringReplace($x, "\", ""))
Sleep(2000)
_debug("<--Exit: Dismount")
EndSelect
EndFunc ;==>_dismount
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Checks if the Mount-driveletter is used by another partition
; if so it shows all free Drives to choose
; ----------------------------------------------------------------------------
Func _driveletter($x)
_debug("break")
_debug("-->Enter: Driveletter")
Local $dl
TrayTip("Status", "Checking Driveletter... ", 10, 1)
$status = DriveStatus($x)
_debug("driveletterstatus: " & StringReplace($status, "INVALID", "FREE"))
While $status <> "INVALID"
$letters = StringSplit("A:|B:|C:|D:|E:|F:|G:|H:|I:|J:|K:|L:|M:|N:|O:|P:|Q:|R:|S:|T:|U:|V:|W:|X:|Y:|Z:", "|")
$count = 1
While $count <> $letters[0] + 1
If DriveStatus($letters[$count]) = "INVALID" Then
$dl = $dl & "|" & $letters[$count]
Else
EndIf
$count += 1
WEnd
$dl2 = StringTrimLeft($dl, 1)
$dl3 = StringTrimLeft($dl2, 3)
$fdl = StringLeft($dl2, 2)
GUICreate("Letter", 171, 111, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45)
$Label_1 = GUICtrlCreateLabel("Laufwerksbuchstabe Besetzt!", 15, 8, 150, 20)
$letter = GUICtrlCreateCombo($fdl, 60, 30, 50) ; create first item
GUICtrlSetState(-1, $GUI_FOCUS)
GUICtrlSetData(-1, $dl3, $x) ; add other item snd set a new default
$Button_1 = GUICtrlCreateButton("&OK", 20, 60, 130, 30)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
GUISetState()
While 1
$Msg = GUIGetMsg()
Select
Case $Msg = $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE)
Exit
Case $Msg = $Button_1
$x = GUICtrlRead($letter)
GUISetState(@SW_HIDE)
ExitLoop
EndSelect
WEnd
$status = DriveStatus($x)
WEnd
_debug("Driveletter:" & $x)
_debug("<--Exit: Driveletter")
Return $x
EndFunc ;==>_driveletter
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Ends Processes running from a specific Drive
; ----------------------------------------------------------------------------
Func _endtasks($x)
_debug("break")
_debug("-->Enter: Endtasks")
TrayTip("Status", "Beende Programme...", 10, 1)
$list = ProcessList()
$tmp = 0
For $i = 1 To $list[0][0]
$z = _ProcessGetLocation($list[$i][0])
If StringLeft($z, 2) = $x Then
$PID = $list[$i][1]
$process = $list[$i][0]
$p = ProcessClose($PID)
_debug("Beende:" & $process & " PID:" & $PID)
TrayTip("Status", "Beende: " & $process & "...", 10, 1)
ProcessWaitClose($PID)
EndIf
Next
_RefreshSystemTray()
_debug("<--Exit: Endtasks")
EndFunc ;==>_endtasks
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Searches for Files on the System with relative Paths
; ----------------------------------------------------------------------------
Func _findfile($x)
_debug("break")
_debug("-->Enter: Findfile")
$accessdrives = DriveGetDrive("all")
$count = 1
While $count <> $accessdrives[0] + 1
$file = _cleanpath($accessdrives[$count] & $x)
If DriveStatus($accessdrives[$count]) = "READY" Then
If FileExists($file) Then
_debug("File Found: " & $file)
_debug("<--Exit: Findfile")
Return $file
Else
_debug($file & " Not Found")
EndIf
Else
EndIf
$count = $count + 1
WEnd
Return "ERROR"
EndFunc ;==>_findfile
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Searches the Truecrypt Executable
; ----------------------------------------------------------------------------
Func _findtruecrypt()
_debug("break")
_debug("-->Enter: Findtruecrypt")
Local $x = ""
$x = @ScriptDir & "truecrypt.exe"
If Not FileExists($x) Then
$x = @ScriptDir & "truecrypt\truecrypt.exe"
EndIf
If Not FileExists($x) Then
$version = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\TrueCrypt", "DisplayVersion")
If @error = 0 Then
_debug("Truecrypt is installed!")
$x = StringSplit(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\TrueCrypt", "ModifyPath"), " ")
$x = StringReplace($x[1], '"', '') & ".exe"
EndIf
Else
EndIf
If Not FileExists($x) Then
MsgBox(0, "ERROR", "Truecrypt wurde nicht gefunden!" & @CRLF & @CRLF & "Bitte tragen Sie de Pfad in der INI ein" & @CRLF & "Bsp:TRUECRYPT=TrueCrypt\TrueCrypt.exe")
_debug("Truecrypt: Not Found" & @CRLF & "Pfad:" & $x)
Exit
Else
_debug("Truecrypt: " & $x)
_debug("Version: " & FileGetVersion($x))
EndIf
_debug("<--Exit: Findtruecrypt")
Return $x
EndFunc ;==>_findtruecrypt
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Password Question
; ----------------------------------------------------------------------------
Func _getpass()
_debug("break")
_debug("-->Enter: Passwort")
TrayTip("Status", "Password...", 10, 1)
GUICreate("Bitte Passwort eingeben für Drive" & $count1, 342, 106, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45)
$Button_1 = GUICtrlCreateButton("&OK", 20, 60, 140, 30)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
$Button_2 = GUICtrlCreateButton("&Beenden", 180, 60, 140, 30)
$Input_1 = GUICtrlCreateInput("", 20, 15, 300, 20, $ES_PASSWORD)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState()
While 1
$Msg = GUIGetMsg()
Select
Case $Msg = $GUI_EVENT_CLOSE
GUISetState(@SW_HIDE)
Exit
Case $Msg = $Button_2
GUISetState(@SW_HIDE)
Exit
Case $Msg = $Button_1
$pass = GUICtrlRead($Input_1, 0)
If Not $pass = "" Then
ExitLoop
Else
MsgBox(0, "ERROR", "Das Passwort darf nicht leer sein!")
EndIf
EndSelect
WEnd
GUISetState(@SW_HIDE)
_debug("<--Exit: Passwort")
Return $pass
EndFunc ;==>_getpass
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Searches,Creations and Updates for INI-Files
; ----------------------------------------------------------------------------
Func _ini($x)
Select
Case $x = 1
ConsoleWrite(@CR & @HOUR & ":" & @MIN & ":" & @SEC & "= " & "-->Enter: Findini " & $x & @CR)
$INI = StringTrimRight(@ScriptFullPath, 4) & ".ini"
If Not FileExists($INI) Then
$INI = $runningdrive & "AUTORUN.INF"
EndIf
If Not FileExists($INI) Then
;Here we need a Gui
ConsoleWrite(@CR & @HOUR & ":" & @MIN & ":" & @SEC & "= " & "Building: " & $INI & @CR)
;Autorun
IniWrite($INI, "Autorun", "OPEN", StringTrimLeft(@ScriptFullPath, 3))
IniWrite($INI, "Autorun", "ICON", StringTrimLeft(@ScriptFullPath, 3))
IniWrite($INI, "Autorun", "Action", "Entschlüsseln")
IniWrite($INI, "Autorun", "UseAutoPlay", "1")
;Settings
IniWrite($INI, "Settings", "Debug", "TRUE")
;Drive1 in Partitionmode
IniWrite($INI, "Drive1", "Mode", "Partition")
IniWrite($INI, "Drive1", "PasswordRequired", "TRUE")
IniWrite($INI, "Drive1", "StandardDriveLetter", "X:")
IniWrite($INI, "Drive1", "Autorun", "TRUE")
IniWrite($INI, "Drive1", "PartitionNumber", "2")
IniWrite($INI, "Drive1", "Keyfile", "\samplekeyfile")
IniWrite($INI, "Drive1", "HarddiskID", "216543464")
;Drive1 in Containermode
IniWrite($INI, "Drive2", "Mode", "Container")
IniWrite($INI, "Drive2", "PasswordRequired", "TRUE")
IniWrite($INI, "Drive2", "StandardDriveLetter", "Y:")
IniWrite($INI, "Drive2", "Autorun", "False")
IniWrite($INI, "Drive2", "Keyfile", "\samplekeyfile")
IniWrite($INI, "Drive2", "Containerfile", "test.container")
MsgBox(0, "INFO", "Die Einstellungsdatei: " & $INI & @CRLF & " musste neu erstellt werden." & @CRLF & "Bitte ändern Sie diese Datei nach Ihren wünschen ab!")
If FileExists($INI) Then
Run("notepad.exe " & $INI, @TempDir)
ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & "= " & "<--Exit: Findini " & $x & @CR)
Exit
Else
MsgBox(0, "ERROR", "INI-File: " & $INI & " konnte nicht erstellt werden!")
Exit
EndIf
Else
ConsoleWrite(@HOUR & ":" & @MIN & ":" & @SEC & "= " & "<--Exit: Findini " & $x & @CR)
Return $INI
EndIf
Case $x = 2
$INI = $Driveletter & "\autorun.ini"
_debug("break")
_debug("-->Enter: INI " & $x)
If Not FileExists($INI) Then
_debug("Building: " & $INI)
;Here we need a Gui
IniWrite($INI, "Settins", "KillExplorer", "FALSE")
IniWrite($INI, "Program1", "KillProcessIfExist", "FALSE")
IniWrite($INI, "Program1", "Program", "\beispiel.exe")
IniWrite($INI, "Program2", "KillProcessIfExist", "TRUE")
IniWrite($INI, "Program2", "Program", "\beispielordner\beispiel.exe")
If FileExists($INI) Then
MsgBox(0, "INFO", "Die Einstellungsdatei: " & $INI & @CRLF & " musste neu erstellt werden." & @CRLF & "Bitte ändern Sie diese Datei nach Ihren wünschen ab!")
Run("notepad.exe " & $INI, @TempDir)
_debug("<--Exit: Iniwrite " & $x)
Return "Build"
Else
MsgBox(0, "ERROR", "INI-File: " & $INI & " konnte nicht erstellt werden!")
Exit
EndIf
Else
_debug("Info: Inifile2=" & $INI)
_debug("<--Exit: Findini " & $x)
Return $INI
EndIf
EndSelect
EndFunc ;==>_ini
; ----------------------------------------------------------------------------
; Author: Unknown
;
; Script Function: Finds Processes running from a specific Drive
; ----------------------------------------------------------------------------
Func _ProcessGetLocation($sProc = @ScriptFullPath)
Local $iPID = ProcessExists($sProc)
If $iPID = 0 Then Return SetError(1, 0, -1)
Local $aProc = DllCall('kernel32.dll', 'hwnd', 'OpenProcess', 'int', BitOR(0x0400, 0x0010), 'int', 0, 'int', $iPID)
If $aProc[0] = 0 Then Return SetError(1, 0, -1)
Local $vStruct = DllStructCreate('int[1024]')
DllCall('psapi.dll', 'int', 'EnumProcessModules', 'hwnd', $aProc[0], 'ptr', DllStructGetPtr($vStruct), 'int', DllStructGetSize($vStruct), 'int*', 0)
Local $aReturn = DllCall('psapi.dll', 'int', 'GetModuleFileNameEx', 'hwnd', $aProc[0], 'int', DllStructGetData($vStruct, 1), 'str', '', 'int', 2048)
If StringLen($aReturn[3]) = 0 Then Return SetError(2, 0, '')
Return $aReturn[3]
EndFunc ;==>_ProcessGetLocation
; ===================================================================
; Author: Valik
; Got from: http://www.autoitscript.com/forum/index.php?showtopic=7404&hl=
; Script Function: Refreshs the System TrayIcons
; ===================================================================
Func _RefreshSystemTray($nDelay = 1000)
; Save Opt settings
Local $oldMatchMode = Opt("WinTitleMatchMode", 4)
Local $oldChildMode = Opt("WinSearchChildren", 1)
Local $error = 0
Do; Pseudo loop
Local $hWnd = WinGetHandle("classname=TrayNotifyWnd")
If @error Then
$error = 1
ExitLoop
EndIf
Local $hControl = ControlGetHandle($hWnd, "", "Button1")
[/autoit] [autoit][/autoit] [autoit]; We're on XP and the Hide Inactive Icons button is there, so expand it
If $hControl <> "" And ControlCommand($hWnd, "", $hControl, "IsVisible") Then
ControlClick($hWnd, "", $hControl)
Sleep($nDelay)
EndIf
Local $posStart = MouseGetPos()
Local $posWin = WinGetPos($hWnd)
Local $y = $posWin[1]
While $y < $posWin[3] + $posWin[1]
Local $x = $posWin[0]
While $x < $posWin[2] + $posWin[0]
DllCall("user32.dll", "int", "SetCursorPos", "int", $x, "int", $y)
If @error Then
$error = 2
ExitLoop 3; Jump out of While/While/Do
EndIf
$x = $x + 8
WEnd
$y = $y + 8
WEnd
DllCall("user32.dll", "int", "SetCursorPos", "int", $posStart[0], "int", $posStart[1])
; We're on XP so we need to hide the inactive icons again.
If $hControl <> "" And ControlCommand($hWnd, "", $hControl, "IsVisible") Then
ControlClick($hWnd, "", $hControl)
EndIf
Until 1
; Restore Opt settings
Opt("WinTitleMatchMode", $oldMatchMode)
Opt("WinSearchChildren", $oldChildMode)
SetError($error)
EndFunc ;==>_RefreshSystemTray
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Harddisk Info to Array
; $output[1]=Harddisknumber $output[2]=Harddiskmodel $output[3]=HarddiskSignature
; ----------------------------------------------------------------------------
Func _SignatureToHarddisk($x)
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$i = 0
If IsObj($colItems) Then
For $objItem In $colItems
If $x = $objItem.Signature Then Return StringRight($objItem.DeviceID, 1)
$i += 1
Next
Else
MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_LogicalDiskToPartition")
Exit
EndIf
EndFunc ;==>_SignatureToHarddisk
; ----------------------------------------------------------------------------
; Author: Merlink <[email='Merlink@gmx.de'][/email]>
;
; Script Function: Starts all Programs in an INI-File
; ----------------------------------------------------------------------------
Func _start($x)
_debug("-->Enter: Start " & $x)
$i = 1
While 1
$INI = IniReadSection($x, "Program" & $i)
If @error Then ExitLoop
$exec = _cleanpath($Driveletter & $INI[_ArraySearch($INI, "Program", 0, 0, 0, 1, 0)][1])
_debug($exec)
If FileExists($exec) Then
_debug("Starting: " & $exec)
TrayTip("Status", "starting: " & $exec, 10, 1)
Run($exec)
Sleep(1000)
Else
_debug("Program: " & $exec & " not found!")
EndIf
$i += 1
WEnd
_debug("<---Exit: Start")
EndFunc ;==>_start
Hier giebts noch die aktuellen Versionsinfos:
Spoiler anzeigen
Update vom 14. Nov.08:
Aktuelle Version=0.0.0.33
-Bugfix: Die inifile 1 wurde nicht korrekt erstellt
-Installierte Version von Truecrypt wird nun erkannt und genutzt
Überarbeitung der Log-ausgabe
Update vom 15. Nov.08:
Aktuelle Version=0.0.0.41
-Überarbeitung der Funktion _findkeyfile: Die Keyfile wird nun auf allen zuzgreifbaren Laufwerken gesucht!
-Änderung der Autorun.inf: Mit PASSWORDREQUIRED=FALSE kann man die Passwortabfrage abschalten.
(Für Leute die nur mit Keyfiles mounten)
Bugfix: Es wurde immer eine Installierte Truecrypt Version gefunden
Update vom 23. Nov.08:
Aktuelle Version=0.0.0.66
-Komplette Überarbeitung ---> Jetzt kann man mehrere Truecrypt Volumes gleichzeitig einbinden lassen!
-Für jeden Container giebt es jetzt eine eigene Dismount-funktion im Menü. (Ist noch ein wenig Buggy, wenn ich Zeit finde werd ichs fixen)
-Für jedes Volume giebt es einige Parameter (siehe in der beispiel-Autorun.inf)
-Jetzt werden Keyfiles und Containerfiles auf dem kompletten System gesucht und genutzt--> Ihr solltet eure Dateien nicht wie bereits existierende Systemdateien benennen! siehe: "Func _findfile"
-Statt gleich die Installierte Version von Truecrypt zu nutzen werden die Portable Versionen in den Pfaden .\truecrypt.exe und
.\truecrypt\truecrypt.exe bevorzugt! -->Weniger kompatibilitätsprobleme!
-Die Funktion _cleanpath sorgt nun für Fehlerbehebung bei falschen INI-Einträgen!
Update vom 27. Nov.08:
Aktuelle Version=0.0.0.67
-Komplette Neustrukturierung des Tray-Menü Codes -->Es treten dort keine Fehler mehr auf!
-In dem Array "$drives" stehen nun alle gesammelten Informationen über die gemounteten Laufwerke drin.
Update vom 1. Dez.08:
Aktuelle Version=0.0.0.69
-Bugfix: Undeklarierte Variable wenn man den eintrag Keyfile=... weglässt
Bekannte Bugs:
Spoiler anzeigen
none
Wünsche und Anregungen:
Spoiler anzeigen
1. Eine ordentliche Versionsüberprüfung von Truecrypt! (Damit kein uraltes Truecrypt den aktuellen container mounted)
2. Hidden Volumes einbinden
3. GUI zur Konfiguration der Autorun.inf fehlt leider noch!!
Hier giebts Das Script kompiliert!
CleanScript_vs_Au3toolkit_2008-01-16.pdf
Und zur Definition der Harddisk-ID braucht ihr Das hier:
(Wenn ich zeit finde wirds integriert mit ner angenehmen GUI)