Какой Fs IOCTL для извлечения физической информации о файле?

Тема в разделе "WASM.NT.KERNEL", создана пользователем NeuronViking, 6 май 2009.

  1. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Всем привет!

    Какой Fs IOCTL для извлечения физической информации о файле? Есть ли такой?
    Мне необходимо получить дисковую информацию о файле в виде партишн/сектор/и т.п.

    Спасибо!
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Получить список кластеров - FSCTL_GET_RETRIEVAL_POINTERS
    Сектора можно вычислить по номеру кластера.
    Партишин/том надо брать из полного имени.
     
  3. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Спасибо Partner + Гугол = http://www.wd-3.com/archive/luserland.htm

    Оч. харошая статья для ньюбов типа меня
    .
     
  4. Rodin

    Rodin New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2007
    Сообщения:
    125
    здесь есть реализация чтения файла NTFS через FSCTL_GET_RETRIEVAL_POINTERS
    http://wasm.ru/print.php?article=lockfileswork
     
  5. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Rodin
    функция ULONGLONG *GetFileClusters(
    PCHAR lpFileName,
    ULONG ClusterSize,
    ULONG *ClCount,
    ULONG *FileSize
    )
    не совсем удачная на мой взгляд, но статья вообще хорошая, спасибо за ссылку!
     
  6. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Partner
    а как решается проблема с маленькими файлами, которые меньше определенного размера? этот FSCTL не работает на маленьких файлах... предполагаю, что если размер файла меньше или равен размеру кластера ФС, то такой файл сидит непосредственно в МФТ. И как в таком случае получить его физическое расположение на томе в терминах LCN?
     
  7. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да.

    Вооружившись вот этим документом, можно решить и эту проблему.
     
  8. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    x64
    Нет. Это не так. Файл будет располагаться непосредственно в MFT, если в файловой записи достаточно для него свободного места. Размер файловой записи как правило 1 Кб, а размер кластера 4 Кб. Это только наиболее популярные значения. В такой ситуации файл размещается в MFT, если его размер находится в районе 700 байт (и то не факт). В случае если размер файловой записи другой, то и значение будет другое. Но уж точно, это не зависит от размера кластера.
     
  9. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Всё верно, это я попутал размер кластера с размером файловой записи.
     
  10. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    x64
    Forever

    Спасибо!