Sign in to follow this  
Followers 0

Password Protected Auto Ejector

4 posts in this topic

Posted (edited)

FYI Here's the code to my collection of programs which do in fact encrypt my flash drive IF I have the checker program in my startup folder:

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.

So I'm looking towards you the experienced Autoit community members, any ideas/suggestions?

Below is the code to the lot of my programs that are run with one another:

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]) & "AutoIt3ProgramsRe-AnimationSequence(LOCKED).exe") Then
  Run (StringUpper($letter[$i]) & "AutoIt3ProgramsRe-AnimationSequence(LOCKED).exe")
  ;Run ("C:UserskidsAppDataRoamingMicrosoftWindowsStart MenuProgramsStartupChecker.exe")
Else
  Sleep(180000)
  _check()
EndIf
Next
EndFuncFor $i = 1 To $letter[0]
Local $file = FileExists(StringUpper($letter[$i]) & "AutoIt3ProgramsRe-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]) & "AutoIt3Programsruneject.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]) & "AutoIt3Programseject.exe")
If WinActive("Ejecting...") == 0 Then
Do
If WinActive("Ejecting...") == 0 Then
Run("F:AutoIt3Programseject.exe")
ElseIf WinActive("Ejecting...") == 0 Then
Run("G:AutoIt3Programseject.exe")
ElseIf WinActive("Ejecting...") == 0 Then
Run("H:AutoIt3Programseject.exe")
ElseIf WinActive("Ejecting...") == 0 Then
Run("I:AutoIt3Programseject.exe")
ElseIf WinActive("Ejecting...") == 0 Then
Run("J:AutoIt3Programseject.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]) & "AutoIt3ProgramshotkeyKEY.exe") Then
	Run (StringUpper($letter[$i]) & "AutoIt3ProgramshotkeyKEY.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: %sn"
;------------------------------------------
;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
Edited by chause4

Share this post


Link to post
Share on other sites



Posted

You got that last code from here >> it's always best to link where you got the code from.

Share this post


Link to post
Share on other sites

Posted

Yup, got it, but even still and one know why I'm having these issues??

Share this post


Link to post
Share on other sites

Posted

chause4,

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

M23

Share this post


Link to post
Share on other sites
This topic is now closed to further replies.
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.