Jump to content

Password Protected Auto Ejector


 Share

Recommended Posts

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!

Checker

Checks 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
Next

Re-AnimationSequence(LOCKED)

It's what "encrypts" my drive

Local $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)
WEnd

runeject

It runs the ejection program and inserts the correct text and commands to make it run

Local $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)
Next

Re-Animation Sequence

It runs my 2 bats that run my frequently used files

Local $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
Next

eject (trust me it works and isn't this issue..)

Got if from Autoit forums

#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_Control

If 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

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 by spudw2k
Link to comment
Share on other sites

  • 2 weeks later...
  • Moderators

chause4,

Thread locked becasue you have now opened a new one. Stick to just the one in future. :oops:

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...