Как получить доступ к файлам, папкам, разделам реестра в Windows Vista


Казалось бы — избитая тема, но не реже чем раз в неделю на форуме начинаются пространные объяснения как же все-таки получить доступ к какому-либо объекту. Чаще всего это конечно папки или файлы, иногда разделы реестра. Попробую собрать воедино способы получения доступа к локальным объектам.

При отсутствии доступа к локальному объекту вы не можете управлять его разрешениями, отсутствие такой возможности может быть компенсировано сменой владельца объекта, после чего вы сможете управлять его разрешениями. Сделать это можно несколькими способами, рассмотрим их по порядку.

Способ 1. Использование графического интерфейса (GUI)

  1. Откройте проводник (редактор реестра) и перейлите к папке/файлу/разделу реестра, к которому необходимо получить доступ.
  2. Для файла или папки.
    1. Нажмите правую клавишу мыши и выберите в конекстном меню Свойства
    2. Перейдите на вкладку Безопасность
    3. Нажмите кнопку Дополнительно
      owner1
    4. Перейдите на вкладку Владелец
    5. Нажмите кнопку Изменить
      owner2
    6. Установите курсор на группу Администраторы или на имя своей учетной записи и нажмите ОК. В случае с папкой также вероятно вам понадобится отметка параметра "Заменить владельца подконтейнеров и объектов".
      owner3
  3. Для раздела реестра.
    1. Нажмите правую клавишу мыши на подразделе реестра (в левой части редактора реестра) и выберите пункт Разрешения
    2. Нажмите кнопку Дополнительно
    3. Остальные шаги идентичны шагам 2.4-2.6
  4. Теперь вы можете выставить разрешения своей учетной записи.
    1. На вкладке Безопасность нажмите кнопку Изменить под списком пользователей и групп
      owner4
    2. Нажмите кнопку Добавить
      owner5
    3. Введите имя своей учетной записи и нажмите ОК
      owner6
    4. Выставьте разрешения на объект добавленной учетной записи
      owner7

 Способ 2. Использование утилит командной строки takeown и icacls (применим только к файлам, папкам и дискам)

  1. Нажмите Пуск VistaStartButton в строке поиска напишите cmd — на найденном файле нажмите правую клавишу мыши и выберите пункт Запуск от имени администратора
    owner8

    Примечание. Запуск от имени администратора в данном случае обязателен независимо от того какаими правами обладает учетная запись в которой вы работаете в данный момент. Исключение может составлять только случай когда вы работаете во встроенной учетной записи Администратор, которая по умолчанию отключена.
  2. В окне cmd написшите следующую команду:
    takeown /f "C:Program FilesERUNTERUNT.EXE"

    Примечание. Здесь и далее полный путь и файл представлены в качестве примера и вместо "C:Program FilesERUNTERUNT.EXE" вы должны написать путь к файлу или папке, к которым необходимо получить доступ.
    Обратите внимание на то, что если в пути присутствуют пробелы (как в примере), то путь должен быть заключен в кавычки.
    В команде используется утилита takeown, которая позволяет восстанавливать доступ к объекту путем переназначения его владельца. Полный синтаксис утилиты вы можете получить по команде takeown /?

  3. В командной строке напишите следующую команду
    icacls "C:Program FilesERUNTERUNT.EXE" /grant Blast:F

    Примечание. В данной команде помимо пути к файлу необходимо указать и имя учетной записи, которой будут переданы разрешения на объект, соответственно вы должны будете написать свое имя пользователя.
    После применения этой команды вам будет показано сообщение об обработке файлов и папок. В случае если таким образом не удастся получить полный доступ к объекту, проделайте процедуру повторно, загрузившись в безопасный режим.
    В этой команде используется утилита icacls, позволяющая управлять списками управления доступом (ACL), а значит и разрешениями для пользователей и процессов использовать  файлы и папки. Синтаксис утилиты вы сможете узнать по команде icacls /?

Способ 3. Пункт смены владельца объекта в контекстном меню проводника.

Для упрощения процедуры смены владельца вы можете добавить соответствующий пункт в контекстное меню проводника.
В предлагаемом варианте также используются утилиты командной строки takeown и icacls с определенными параметрами, а полученная команда установит владельцем объекта, на котором будет применяться пункт меню, группу Администраторы (или Administrators в английской версии ОС).

Для добавления пункта меню "Смена владельца" в русской версии Windows Vista примените этот твик реестра:
Примечание: подробнее о применении твиков реестра вы можете прочитать здесь: Применение твиков реестра

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT*shellrunas]
@="Смена владельца"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT*shellrunascommand]
@="cmd.exe /c takeown /f "%1" && icacls "%1" /grant администраторы:F"
"IsolatedCommand"="cmd.exe /c takeown /f "%1" && icacls "%1" /grant администраторы:F"

[HKEY_CLASSES_ROOTDirectoryshellrunas]
@="Смена владельца"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOTDirectoryshellrunascommand]
@="cmd.exe /c takeown /f "%1" /r /d y && icacls "%1" /grant администраторы:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f "%1" /r /d y && icacls "%1" /grant администраторы:F /t"

Для добавления пункта меню "Take Ownership" в английской версии Windows Vista примените этот твик реестра:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT*shellrunas]
@="Take Ownership"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT*shellrunascommand]
@="cmd.exe /c takeown /f "%1" && icacls "%1" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f "%1" && icacls "%1" /grant administrators:F"

[HKEY_CLASSES_ROOTDirectoryshellrunas]
@="Take Ownership"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOTDirectoryshellrunascommand]
@="cmd.exe /c takeown /f "%1" /r /d y && icacls "%1" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f "%1" /r /d y && icacls "%1" /grant administrators:F /t"

Для удаления этого пункта меню (независимо от языка системы) можете использовать следующий твик реестра:

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT*shellrunas]

[-HKEY_CLASSES_ROOTDirectoryshellrunas]

Готовые файлы реестра для добавления и удаления этого пункта меню: http://cid-10dc612aac1eb731.skydrive.live.com/embedrow.aspx/%d0%a2%d0%b2%d0%b8%d0%ba%d0%b8%d1%80%d0%b5%d0%b5%d1%81%d1%82%d1%80%d0%b0/TakeOwnership.zip

3 Responses to Как получить доступ к файлам, папкам, разделам реестра в Windows Vista

  1. Vadim says:

    Супер, Паша, спасибо :) Хорошо, что ты это опубликовал сегодня, потому что я сам собирался написать на эту тему на выходных ;)
     
    Получить полный доступ к локальным ресурсам зачастую означает стать владельцем этих ресурсов, а это уже будет компенсировать отсутствие определенных разрешений.
    А компенсирует ли? Ты вот во втором способе не только владельцем становишься, но и разрешения выставляешь. Другиии словами, если у тебя не было прав на папку, потом ты стал ее владельцем, ты можешь в нее записывать файлы?
     
    В способе 2, кстати, мне кажется, можно сказать, что там не только icacls, но и takeown используется. И относительно контекстного меню — то же самое (хотя и видно из кода). Для меню, можно сделать второй вариант — для англ. ОС, но это если не лень.

  2. Vadim says:

    P.S. В заголовке нужно добавить "… в Windows Vista" :)

  3. Kravchenko says:

    Да, в принципе владение объектом не совсем то же самое, что например полный доступ… Я не знаю как более правильно сказать. То есть если я сейчас для эксперимента заменю владельца опр. папки на гостя, то конечно не смогу получить к ней доступ; вместе с тем, заменяя владельца с гостя на Администраторов и открывая снова вкладку Безопасность я увижу, что группа Администраторы (и я в том числе) имеют в разрешениях Полный доступ.
    Впрочем я готов согласиться — замена владельца скорее не компенсирует отсутствие разрешений на объект, а позволяет ими (разрешениями) управлять.
     
    Согласен с тобой, добавлю вкратце и об утилите icacls и о takeown
     
    И твик для английско версии тоже сделаем, не лень :)
     
    Спасибо за рецензирование, ты меня всегда с этим выручал :)

Оставьте комментарий