Доступ к каждому файлу в файловой системе (независимо от того, какой) в Windows 7

В С# на компьютере с Windows 7, как я могу программно получить доступ к каждому файлу в файловой системе, как если бы я был «главным администратором».

Главный приоритет здесь заключается в том, что после установки моей программы на С# она не столкнется с какими-либо проблемами с правами доступа к файлам/папкам. Моя программа работает как служба Windows, и она должна позволять пользователю создавать резервные копии любых файлов в файловой системе.


person Lonnie Best    schedule 07.05.2010    source источник
comment
Я считаю, что у вас слишком упрощенное представление о том, что такое резервное копирование. Это не просто копирование файлов. Более того, это не учитывает файлы, которые используются и, возможно, изменяются во время резервного копирования, что может привести к их повреждению. Вы не принимаете во внимание зашифрованные файлы, резервное копирование и восстановление ключей EFS, несколько файловых систем, состояние файлов. Вы также не принимаете во внимание состояние системы или то, как вы ее восстанавливаете. Программа резервного копирования должна делать массу вещей, и я предлагаю вам начать изучать, что это такое, прежде чем писать много кода.   -  person Erik Funkenbusch    schedule 07.05.2010
comment
Каждая вещь, которую вы упомянули, ценна. Моя программа работает в Windows XP Pro, но я пытаюсь заставить ее работать в Windows 7 и продолжаю сталкиваться с проблемами разрешений, с которыми не сталкиваюсь при запуске под системной учетной записью Windows XP Pro.   -  person Lonnie Best    schedule 08.05.2010


Ответы (3)


Я бы подумал, что это сработает, если вы просто убедитесь, что служба работает под учетной записью в группе Backup Operator. Я думал, что эта группа имеет доступ ко всем файлам, независимо от того, какие разрешения есть.

Цитата со страницы поддержки MS:

SID: S-1-5-32-551 Название: Операторы резервного копирования Описание: Встроенная группа. По умолчанию в группе нет участников. Операторы резервного копирования могут создавать резервные копии и восстанавливать все файлы на компьютере, независимо от разрешений, которые защищают эти файлы. Операторы резервного копирования также могут войти в систему и выключить компьютер.

Хотя эта страница предназначена для более ранних версий Windows, поэтому я не уверен на 100%, что она не была изменена.

person Hans Olsson    schedule 07.05.2010
comment
Я не думаю, что просто работа с привилегиями оператора резервного копирования позволит вам открыть любой файл. Я почти уверен, что вам нужно открывать файлы с установленным FILE_FLAG_BACKUP_SEMANTICS (и, возможно, с некоторыми другими флагами) с помощью API CreateFile. - person Chris Haas; 08.05.2010
comment
Ни в моем комментарии, ни в скопированной цитате не упоминается открытие файлов ... когда я писал доступ, я имел в виду доступ к резервному копированию и восстановлению, хотя, возможно, мне следовало это указать. - person Hans Olsson; 08.05.2010

Существует API резервного копирования Win32, который, скорее всего, вам нужен, возможно, в сочетании с Служба теневого копирования томов. Ваше приложение должно иметь привилегию SeBackupPrivilege. . Однако обратите внимание, что файлы, зашифрованные с помощью EFS, можно читать, но только в зашифрованном виде.

Ссылки, которые также могут быть вам интересны:

http://mutable.net/blog/archive/2006/11/21/an-intelligent-backup-system-for-windows-part-3.aspx

http://msdn.microsoft.com/en-us/library/aa362520(v=VS.85).aspx

person Lucero    schedule 07.05.2010

Вам нужно будет настроить службу для запуска под учетной записью с достаточными привилегиями.

Насколько мне известно, стандартная «Локальная система» уже имеет довольно высокие привилегии. Но несмотря ни на что, вы не сможете получить доступ к файлам, зарезервированным для системной учетной записи, или к файлам, которые используются исключительно вами. Ваша программа всегда должна иметь возможность обрабатывать исключения, связанные с доступом.

person Henk Holterman    schedule 07.05.2010