Всем привет! Какой Fs IOCTL для извлечения физической информации о файле? Есть ли такой? Мне необходимо получить дисковую информацию о файле в виде партишн/сектор/и т.п. Спасибо!
Получить список кластеров - FSCTL_GET_RETRIEVAL_POINTERS Сектора можно вычислить по номеру кластера. Партишин/том надо брать из полного имени.
Спасибо Partner + Гугол = http://www.wd-3.com/archive/luserland.htm Оч. харошая статья для ньюбов типа меня .
здесь есть реализация чтения файла NTFS через FSCTL_GET_RETRIEVAL_POINTERS http://wasm.ru/print.php?article=lockfileswork
Rodin функция ULONGLONG *GetFileClusters( PCHAR lpFileName, ULONG ClusterSize, ULONG *ClCount, ULONG *FileSize ) не совсем удачная на мой взгляд, но статья вообще хорошая, спасибо за ссылку!
Partner а как решается проблема с маленькими файлами, которые меньше определенного размера? этот FSCTL не работает на маленьких файлах... предполагаю, что если размер файла меньше или равен размеру кластера ФС, то такой файл сидит непосредственно в МФТ. И как в таком случае получить его физическое расположение на томе в терминах LCN?
x64 Нет. Это не так. Файл будет располагаться непосредственно в MFT, если в файловой записи достаточно для него свободного места. Размер файловой записи как правило 1 Кб, а размер кластера 4 Кб. Это только наиболее популярные значения. В такой ситуации файл размещается в MFT, если его размер находится в районе 700 байт (и то не факт). В случае если размер файловой записи другой, то и значение будет другое. Но уж точно, это не зависит от размера кластера.