Solarlight27 Posted March 8, 2012 Share Posted March 8, 2012 FYI Here's the code to my collection of programs which encrypt my flash drive IF the checker program in running when the USB is plugged in:My problem here is that the project runs fine the first time around, however when i replug in my flash drive the program doesn't work, it doesn't ask for a password again like it should in theory.I've tried loops, for statements, recursion (as seen below) and the project either creates infinite windows which comes just short of killing my CP with lag or it just runs the one time and that's it.Below is the code to the lot of my programs that are run with one another:(If you want to use it feel free)Thank You All!CheckerChecks to see if my drive is plugged in via seeing if a file exits on a removable drive#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker #Obfuscator_Parameters=/cs #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** Local $letter = DriveGetDrive("REMOVABLE") Func _check() For $i = 1 To $letter[0] If FileExists(StringUpper($letter[$i]) & "\AutoIt3\Programs\Re-AnimationSequence(LOCKED).exe") Then Run (StringUpper($letter[$i]) & "\AutoIt3\Programs\Re-AnimationSequence(LOCKED).exe") ;Run ("C:\Users\kids\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Checker.exe") Else Sleep(180000) _check() EndIf Next EndFuncFor $i = 1 To $letter[0] Local $file = FileExists(StringUpper($letter[$i]) & "\AutoIt3\Programs\Re-AnimationSequence(LOCKED).exe") If $file <> 0 Then _check() EndIf NextRe-AnimationSequence(LOCKED)It's what "encrypts" my driveLocal $Password = InputBox("Security Check", "Enter your password.", "", "*") Local $letter = DriveGetDrive("REMOVABLE") For $i = 1 To $letter[0] If ($Password = "password") Then BlockInput(1) Run(StringUpper($letter[$i]) & "\Re-Animation Sequence.exe") Sleep(2000) BlockInput(0) Exit Else Run(StringUpper($letter[$i]) & "\AutoIt3\Programs\runeject.exe") Sleep(2000) Exit EndIf Next While 1 MouseGetPos() Sleep(5) WEndrunejectIt runs the ejection program and inserts the correct text and commands to make it runLocal $letter = DriveGetDrive("REMOVABLE") For $i = 1 To $letter[0] Run(StringUpper($letter[$i]) & "\AutoIt3\Programs\eject.exe") If WinActive("Ejecting...") == 0 Then Do If WinActive("Ejecting...") == 0 Then Run("F:\AutoIt3\Programs\eject.exe") ElseIf WinActive("Ejecting...") == 0 Then Run("G:\AutoIt3\Programs\eject.exe") ElseIf WinActive("Ejecting...") == 0 Then Run("H:\AutoIt3\Programs\eject.exe") ElseIf WinActive("Ejecting...") == 0 Then Run("I:\AutoIt3\Programs\eject.exe") ElseIf WinActive("Ejecting...") == 0 Then Run("J:\AutoIt3\Programs\eject.exe") Else MsgBox(4096, "DriveGetDrive", "It appears an error occurred.") EndIf Until (WinActive("Ejecting...") <> 0) EndIf BlockInput(1) Send ("{BACKSPACE}{BACKSPACE}{BACKSPACE}" & StringUpper($letter[$i]) & "{ENTER}") Sleep (1000) Send ("{ENTER}") BlockInput(0) NextRe-Animation SequenceIt runs my 2 bats that run my frequently used filesLocal $letter = DriveGetDrive("REMOVABLE") For $i = 1 To $letter[0] If @error Then Exit ElseIf FileExists(StringUpper($letter[$i]) & "\Re-AnimationSequence2.bat") Then Run (StringUpper($letter[$i]) & "Re-AnimationSequence2.bat") ElseIf FileExists(StringUpper($letter[$i]) & "\Re-AnimationSequence.bat") Then Run (StringUpper($letter[$i]) & "Re-AnimationSequence.bat") EndIf If FileExists(StringUpper($letter[$i]) & "\AutoIt3\Programs\hotkeyKEY.exe") Then Run (StringUpper($letter[$i]) & "\AutoIt3\Programs\hotkeyKEY.exe") EndIf Nexteject (trust me it works and isn't this issue..)Got if from Autoit forums expandcollapse popup#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <WinApi.au3> ;Prototypes ;BOOL EjectVolume(TCHAR cDriveLetter); ;HANDLE OpenVolume(TCHAR cDriveLetter); ;BOOL LockVolume(HANDLE hVolume); ;BOOL DismountVolume(HANDLE hVolume); ;BOOL PreventRemovalOfVolume(HANDLE hVolume, BOOL fPrevent); ;BOOL AutoEjectVolume(HANDLE hVolume); ;BOOL CloseVolume(HANDLE hVolume); ;StringFormat Output $szVolumeFormat = "\\\\.\\%s" $szRootFormat = "%s\\" $szErrorFormat = "Error %d: %s\n" ;------------------------------------------ ;Arbitrary variables ;;Global Const $INVALID_HANDLE_VALUE = 0 ;------------------------------------------ ;DeviceIoControl Contants Global Const $FSCTL_LOCK_VOLUME = int(0x090018) Global Const $FSCTL_DISMOUNT_VOLUME = int(0x00090020) Global Const $IOCTL_STORAGE_EJECT_MEDIA = int(0x002D4808) Global Const $IOCTL_STORAGE_MEDIA_REMOVAL = int(0x002D4804) ;------------------------------------------ ;Retry Constants Global Const $LOCK_TIMEOUT = 10000 ; 10 Seconds Global Const $LOCK_RETRIES = 20 $OpenVolume = InputBox("Ejecting...", "Enter the drive to eject", "G:") ConsoleWrite("Trying to Eject the drive " & EjectVolume($OpenVolume) & @crlf) Func ReportError($szMsg) ConsoleWrite(StringFormat($szErrorFormat, _WinAPI_GetLastErrorMessage (), $szMsg) & @CRLF) Exit EndFunc ;==>ReportError Func OpenVolume($cDriveLetter) ;HANDLE hVolume ;UINT uDriveType ;TCHAR szVolumeName[8] ;TCHAR szRootName[5] ;DWORD dwAccessFlags $szRootName = StringFormat($szRootFormat, $cDriveLetter) $uDriveType = DriveGetType($szRootName); ConsoleWrite($szRootName & @tab & $uDriveType & @crlf) Switch $uDriveType Case "Removable" $dwAccessFlags = 6 Case "CDROM" $dwAccessFlags = 2 Case Else ConsoleWrite("Cannot eject. Drive type is incorrect." & @CRLF) Return $INVALID_HANDLE_VALUE EndSwitch $szVolumeName = StringFormat($szVolumeFormat, $cDriveLetter) ;$szVolumeName = $szVolumeFormat & $cDriveLetter ConsoleWrite($szVolumeName & @crlf ) $hVolume = _WinAPI_CreateFile ($szVolumeName, 2,$dwAccessFlags, 6) #cs hVolume = CreateFile( szVolumeName, dwAccessFlags, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); #ce If ($hVolume == $INVALID_HANDLE_VALUE) Then ReportError("CreateFile"); Return $hVolume; EndFunc ;==>OpenVolume Func CloseVolume($hVolume) Return _WinAPI_CloseHandle ($hVolume); EndFunc ;==>CloseVolume Func LockVolume($hVolume) Local $dwBytesReturned Local $dwSleepAmount Local $nTryCount local $iRead $dwSleepAmount = $LOCK_TIMEOUT / $LOCK_RETRIES; ; Do this in a loop until a timeout period has expired For $nTryCount = 0 To $nTryCount < $LOCK_RETRIES If _Device_Control($hVolume, $FSCTL_LOCK_VOLUME, $iRead) Then Return True Else Sleep($dwSleepAmount); EndIf Next Return False; EndFunc ;==>LockVolume Func DismountVolume($hVolume) ConsoleWrite("Dismount " & $hVolume & @crlf) Local $dwBytesReturned, $iRead local $aResult = _Device_Control($hVolume, $FSCTL_DISMOUNT_VOLUME, $iRead) msgbox(0,"",$aResult) Return $aResult ;Return $dwBytesReturned EndFunc ;==>DismountVolume Func PreventRemovalOfVolume($hVolume, $fPreventRemoval) Local $dwBytesReturned Local $aResult Local $lpInbuffer,$nInBufferSize,$lpOutBuffer,$nOutBufferSize,$lpOverlapped $PMRBUFFER = DllStructCreate("bool PreventMediaRemoval") DllStructSetData($PMRBUFFER,"PreventMediaRemoval",$fPreventRemoval) $lpBytesReturned = DllStructCreate("int Read") $pRead = DllStructGetPtr($lpBytesReturned, "Read") $aResult = Dllcall("kernel32.dll","int","DeviceIoControl","hwnd",$hVolume,"uint",$IOCTL_STORAGE_MEDIA_REMOVAL,"ptr",DllStructGetPtr($PMRBUFFER),"uint",DllStructGetSize($PMRBUFFER), _ "ptr",$lpOutBuffer,"uint",$nOutBufferSize,"ptr",$pRead,"ptr",$lpOverlapped) if $aResult = 0 then msgbox(0,"",_WinAPI_GetLastErrorMessage()) Return $aResult <> 0 ;& PMRBuffer, sizeof (PREVENT_MEDIA_REMOVAL), ;NULL, 0, ; & dwBytesReturned, ;NULL); EndFunc ;==>PreventRemovalOfVolume Func AutoEjectVolume($hVolume) Local $aResult, $iRead; $aResult = _Device_Control($hVolume, $IOCTL_STORAGE_EJECT_MEDIA, $iRead) Return $aResult EndFunc ;==>AutoEjectVolume Func EjectVolume($cDriveLetter) Local $hVolume; Local $fRemoveSafely = False; Local $fAutoEject = False; ; Open the volume. $hVolume = OpenVolume($cDriveLetter); If $hVolume == $INVALID_HANDLE_VALUE Then Return False ; Lock and dismount the volume. If LockVolume($hVolume) And DismountVolume($hVolume) Then $fRemoveSafely = True; ConsoleWrite("Volume Locked and Dismounted, trying to Eject " & @crlf) ; Set prevent removal to false and Eject the volume. If PreventRemovalOfVolume($hVolume, False) And AutoEjectVolume($hVolume) Then $fAutoEject = True; EndIf Else ConsoleWrite("Volume can't be locked or dismounted, please close possible opened files" & @crlf) EndIf ; Close the volume so other processes can use the drive. If CloseVolume($hVolume) = False Then Return False; EndIf If $fAutoEject Then ConsoleWrite(StringFormat("Media in drive %s has been ejected safely.\n", $cDriveLetter)) Else If $fRemoveSafely Then ConsoleWrite(StringFormat("Media in drive %s can be safely removed.\n", $cDriveLetter)) EndIf EndIf Return True; EndFunc ;==>EjectVolume Func _Device_Control($hDevice, $dwIoControlAutoit, ByRef $iRead) Local $aResult Local $lpInbuffer,$nInBufferSize,$lpOutBuffer,$nOutBufferSize,$lpOverlapped $tRead = DllStructCreate("int Data") $aResult = Dllcall("kernel32.dll","int","DeviceIoControl","hwnd",$hDevice,"uint",$dwIoControlAutoit,"ptr",$lpInBuffer,"uint",0, _ "ptr",$lpOutBuffer,"uint",0,"ptr",DllStructGetPtr($tRead),"ptr",$lpOverlapped) $iRead = DllStructGetData($tRead, "Data") ConsoleWrite("Device Control " & $iRead & @CRLF) Return $aResult<>0 EndFunc ;==>_Device_ControlIf anyone has any additional ideas to make this code better or anything else to improve it or know how to correctly make these scripts to always work with a USB no matter how many times its re-plugged into a computer that would be much appreciated! Link to comment Share on other sites More sharing options...
spudw2k Posted March 8, 2012 Share Posted March 8, 2012 (edited) 1) Stick to one post. It's really not smart to create topics. It just shows that you are impatient and is a waste of time.2) It is very poor practice to embed a cleartext password in a script (major pet peeve of mine). Do yourself a favor and research using a password hash instead.3) Someone will get to you when/if they can, but they may be less inclined to help someone who is being a nuisance. Edited March 8, 2012 by spudw2k Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX BuilderMisc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retreive SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose ArrayProjects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalcCool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF Link to comment Share on other sites More sharing options...
Solarlight27 Posted March 22, 2012 Author Share Posted March 22, 2012 (edited) So any ideas Autoit Community? Edited March 22, 2012 by chause4 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 23, 2012 Moderators Share Posted March 23, 2012 chause4, Thread locked becasue you have now opened a new one. Stick to just the one in future. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Recommended Posts