Jump to content

Search the Community

Showing results for tags 'folder system protected'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Announcements and Site News
    • Administration
  • AutoIt v3
    • AutoIt Help and Support
    • AutoIt Technical Discussion
    • AutoIt Example Scripts
  • Scripting and Development
    • Developer General Discussion
    • Language Specific Discussion
  • IT Administration
    • Operating System Deployment
    • Windows Client
    • Windows Server
    • Office

Categories

  • AutoIt Team
    • Beta
    • MVP
  • AutoIt
    • Automation
    • Databases and web connections
    • Data compression
    • Encryption and hash
    • Games
    • GUI Additions
    • Hardware
    • Information gathering
    • Internet protocol suite
    • Maths
    • Media
    • PDF
    • Security
    • Social Media and other Website API
    • Windows
  • Scripting and Development
  • IT Administration
    • Operating System Deployment
    • Windows Client
    • Windows Server
    • Office

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Member Title


Location


WWW


Interests

Found 1 result

  1. Hello I hope I won't be redundant, I didn't find any answer with my several searches with search engines and the forum. The context is the following: I need to know if the current folder from where my script is running is a system protected folder or not, in order to determine where to write the .ini file which will keep settings of this script. This script is running elevated so I can't just test to write a file from it as it would always work in any folder. In case it is in a protected folder, I would write the .ini file in the current user's folder, like Microsoft says. In case it isn't, as my script is portable, I would write it next to the script itself. Here is the workaround I found, I hope it can help or give ideas to others. It only tests if given folder is protected or not. #AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator ; #FUNCTION# ==================================================================================================================== ; Name ..........: _IsProtectedFolder ; Description ...: Test with a script running elevated if a folder is (system) protected. ; It tries to create a file in user mode via task scheduler in the folder defined, if created it is not protected else it is. ; Syntax ........: _IsProtectedFolder($Folder) ; Parameters ....: $folder -> The folder to test ; Return values .: False: not protected folder ; True: protected folder ; Sets @error to 1 If folder doesn't exist ; Author ........: AvvA ; Remarks .......: Must be run from an elevated script. ; Windows Vista and Seven OSes. ; The '/SC ONSTART' argument of the created task is irrelevant, it only permits to not define other parameters like start/end hour. ; The '/RL LIMITED' is facultative as by default it should create a limited rights task ; Link ..........: http://www.autoitscript.com/forum/topic/138227-determine-from-an-elevated-script-if-current-folder-is-system-write-protected/ ; Example .......: Yes ; =============================================================================================================================== Func _IsProtectedFolder($Folder) ;mandatory tests ;you can remove this following test If Not IsAdmin() Then ;you must run this script elevated MsgBox(0, "Error", "You must run this function with administrative privileges." & @LF&@LF & "Add this line to the top of your script:" & @LF & "#AutoIt3Wrapper_Res_requestedExecutionLevel=requireAdministrator" & @LF&@LF & "Or run SciTE elevated.") Exit EndIf ;you shouldn't remove the 2 following tests If StringRight($Folder, 1) == '' Then $Folder = StringTrimRight($Folder, 1) ;remove an eventual anti-slash at the end of folder name If Not FileExists($Folder) Then ;the folder to test should exists ^^ SetError(1) Return EndIf ;generate random names for the task and the test file Local $TestFileName = $Folder & '' & Random(100000000, 999999999, 1) & '-' & Random(100000000, 999999999, 1) & '-testingprotectedfolderfile.txt' Local $TaskName = Random(100000000, 999999999, 1) & '-randomtaskname' ;create a scheduled task which will try a file write in the folder defined ShellExecuteWait('schtasks.exe', '/Create /TN ' & $TaskName & ' /RL LIMITED /F /SC ONSTART /NP /TR "cmd /C ''type /? > ''' & $TestFileName & '''''"', '', '', @SW_HIDE) ShellExecuteWait('schtasks.exe', '/run /TN ' & $TaskName, '', '', @SW_HIDE) ;launch this task ;Sleep(500) ;leave time for the file to be written, ie: if you comment the line below, you'll always get 'protected folder' answer ShellExecuteWait('schtasks.exe', '/delete /TN ' & $TaskName & ' /F', '', '', @SW_HIDE) ;delete this task If FileExists($TestFileName) Then ;test if file was written FileDelete($TestFileName) ;delete this test file Return False ;folder isn't protected Else Return True ;folder is protected EndIf EndFunc ;Example ;$Folder = @SystemDir & 'UsersPublic' ;this folder most likely doesn't exist ;$Folder = @HomeDrive & 'UsersPublic' ;it is not a protected folder ;$Folder = EnvGet("systemdrive") ;usually C: -> it is a protected folder ;$Folder = EnvGet("windir") ;usually C:Windows -> it is a protected folder $Folder = @ScriptDir $Protected = _IsProtectedFolder($Folder) If @error Then $Result = 'not existing' ElseIf $Protected Then $Result = 'protected' Else $Result = 'not protected' EndIf MsgBox(0, "Test protected folder", $Folder & ' folder is ' & $Result)
×
×
  • Create New...