Как мне прочитать главную таблицу файлов NTFS на C (* не * C++)?

Мне нужен простой и легкий способ чтения NTFS MFT на сервере Windows, используя только C. Моя цель - программным способом вернуть набор каталогов и их разрешения для приложения, которое разрабатывает моя компания.

Каждый другой ответ, который я исследовал на StackOverflow и других местах, связан с использованием C++ или других языков и, как правило, очень раздут. Я почти уверен, что то, что я хочу, можно сделать всего несколькими строками кода, используя Windows API для вызова CreateFile (для получения дескриптора корневого тома) и DeviceIoControl (для чтения MFT). Но я не могу найти для этого простого решения C.

Обратите внимание, что, хотя я много лет являюсь разработчиком C# /. NET (а также знаю другие языки, включая Java и Python), я новичок в низкоуровневом программировании на C и вызовах Windows API. Я также понимаю, что есть бесплатный Mft2Csv, который делает именно это. Но фактический исходный код мне недоступен для реинжиниринга (GitHub имеет только исполняемые и вспомогательные файлы).

Я также понимаю, что могу просто проанализировать дерево каталогов, используя C# пространства имен .NET System.IO и System.Security.AccessControl. Но для моих целей это слишком медленно.

Видели Как получить доступ к MFT через C#? Для этого требуется довольно много работы, я бы не подумал, что реализация на C будет проще, чем реализация на C++ / #.

Alex K. 08.01.2019 18:01

Я пробовал инструкции в stackoverflow.com/questions/21661798/…, но продолжал сталкиваться с ошибками разрешений, даже когда запускал код с повышенными правами администратора.

Cade Bryant 08.01.2019 18:14

Анализ директории tress не только медленный ... он потенциально проблематичен, поскольку вы можете оказаться в рекурсивном обходе из-за символических ссылок. Чтение MFT - это просто головная боль, но это очень быстро. Код в вышеупомянутом ответе может прочитать MFT за пару секунд. Любая проблема с разрешениями может быть связана с тем, что вам нужно подтвердить некоторые привилегии в дополнение к тому, что вы являетесь администратором.

Clay 08.01.2019 19:50

@AlexK. Я снова попытался использовать код из Как получить доступ к MFT через C#, но все равно получаю ошибку Windows 5 (доступ запрещен).

Cade Bryant 08.01.2019 20:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
1 344
0

Другие вопросы по теме