Поиск ВСЕХ файлов независимо от разрешений (Windows XP, C #) - PullRequest
1 голос
/ 28 июля 2011

У меня есть необходимость найти ВСЕ файлы на моем жестком диске (в разделе C:), независимо от разрешений. (Windows XP Pro, с использованием C #)

В предыдущем вопросе мне сказали:

Папка «C: \ System Volume Inforamtion» не может быть просмотрена, поскольку она назначена только пользователю SYSTEM. Для того, чтобы увидеть его внутри, вы должны стать его владельцем. Однако это не рекомендуется по соображениям безопасности. - Алекс Мендес

Я работал с Windows годами, и впервые слышу о пользователе SYSTEM (что объясняет многие разочарования, которые у меня были в прошлом). Я предполагал, что «Администратор» похож на пользователя «root» в UNIX, который имеет доступ ко всему.

В Windows есть конечный пользователь, которому принадлежит ВСЕ?

Если да, то кто этот пользователь?

Если это так, как мне запустить программу на C # от имени этого пользователя, чтобы я мог видеть все файлы?

Если нет, есть ли другой способ? (Другие программы делают это.)

Ответы [ 4 ]

0 голосов
/ 28 июля 2011

Нет, пользователь root не имеет доступа ко всему.Работа в качестве СИСТЕМЫ, Администратора или любого другого пользователя не решит вашу проблему.Вы взяли на себя очень сложную проблему, и выполнение ее в C # станет дополнительной проблемой.Я рекомендую переосмыслить использование C #.

Start здесь и прочитать описание флага FILE_FLAG_BACKUP_SEMANTICS и ссылку там о том, как изменить привилегии для токена.По сути, вам придется временно изменить права доступа для каждого файла / каталога, к которому у вас нет прав на чтение.

0 голосов
/ 28 июля 2011

Я считаю, FILE_FLAG_BACKUP_SEMANTICS в основном может делать то, что вам нужно.

0 голосов
/ 28 июля 2011

Вы можете запустить приложение (или командную строку) в интерактивном режиме (как SYSTEM).См., Например, принятый ответ на этот вопрос .Как только приложение запускает интерактивный контекст, оно может напрямую открыть информацию о томе системы.

[Отредактировано для добавления пояснения:]

В Windows есть конечный пользователь, которому принадлежит ВСЕ?

Нет.Существует привилегия SeTakeOwnershipPrivilege, которая по умолчанию предоставляется администраторам (и неявно System), которая позволяет принимать права собственности на объекты.Владелец объекта всегда может изменить ACL, чтобы предоставить ему доступ.

Существует еще одна привилегия, SeBackupPrivilege, предоставленная администраторам и операторам резервного копирования (и, опять же, System).Он предназначен для чтения файлов для выполнения резервного копирования и обходит обычные операции чтения.Это эффективно разрешает доступ на чтение к любому файлу, минуя обычные ограничения контроля доступа.

Если да, то кто этот пользователь?

Нет такого пользователя.По умолчанию Windows предоставляет только SYSTEM доступ к C: \ System Volume Information с помощью ACL в этом каталоге.

Если это так, как мне запустить программу на C # от имени этого пользователя, чтобы я мог видеть всефайлы?

Вы можете запустить программу как SYSTEM специально для просмотра информации о томе системы (см. выше), хотя это не позволит вам обязательно просмотреть все файлы.Я думаю, что наличие привилегий оператора резервного копирования и проведение операций чтения с флагом резервного копирования - это единственный механизм для просмотра всех файлов независимо от разрешений.

0 голосов
/ 28 июля 2011

Я почти уверен, что единственный способ получить доступ к этим папкам * - это запустить как Ring-0, который является собственным разделом ЦП для пользователя уровня ядра;это также способ, которым некоторые вредоносные программы / руткиты могут получить свои хуки в вашу систему.

Я совершенно уверен, что этого нельзя достичь в .Net, и я не уверен, что вы действительно можете достичьэто вообще без написания драйвера системного уровня (файл .sys).

Независимо от того, файловая система работает для ОС, если вы находитесь на диске, отформатированном в NTFS, и содержимое зашифровано, супер чтение-all драйвер не расшифровывает файл для вас.

Редактировать: те папки, которые являются системными папками. Если вы можете вызывать функции BackupRead / Write, вы можете получить доступ к другим данным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...