Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Расположение заблокированного файла на диске. [D7, NT4, Win2k, WinXP]


Страницы:   1 2

Семен Сорокин ©   (2005-06-22 18:06:00) 

Приветствую гуру, кто может подсказать как получить покластерное расположение заблокированного файла на диске, например pagefile.sys (NT4, W2k, XP). Не блокированные файлы просмотриваю с помощью ф-ии DeviceIoControl с управляющим кодом FSCTL_GET_RETRIEVAL_POINTERS, но дело в том что там входным параметром используется Handle открытого файла, а если он заблокирован, то этот Handle не удасться получить.

С уважением, Семен.


Семен Сорокин   (2005-06-22 18:57:00) [21]

ага, а ведь есть же что-то :) по поводу структуры NTFS - это да (через FSCTL_GET_NTFS_FILE_RECORD если я не ошибаюсь), а что делать если FAT32... необходимо нечто универсальное.

PS. Спасибо за помощь.


Игорь Шевченко   (2005-06-22 18:49:00) [22]

Семен Сорокин ©   (22.06.05 18:39) [4]

Defrag имени Руссиновича тоже не показывает :)

Можно, конечно, и структуры NTFS читать, у Свена Шрайбера пример есть, но уж больно муторно.


Семен Сорокин   (2005-06-22 18:39:00) [23]


> Игорь Шевченко ©   (22.06.05 18:32) [3]
> А открыть файл с FILE_SHARE_READ + FILE_SHARE_WRITE не помогает
> ?

неа, я уже перепробовал все возможные флаги :)
результат один и тот-же:
32 The process cannot access the file because it is being used by another process. ERROR_SHARING_VIOLATION  
я уже даже пробовал открывть его из сервиса с SYSTEM-правами - та же песня.


Игорь Шевченко   (2005-06-22 18:32:00) [24]

А открыть файл с FILE_SHARE_READ + FILE_SHARE_WRITE не помогает ?


Семен Сорокин   (2005-06-22 18:28:00) [25]

3 функции:
FSCTL_GET_RETRIEVAL_POINTERS Get information about a file's cluster use.
FSCTL_GET_VOLUME_BITMAP Get a bitmap of cluster allocation.
FSCTL_MOVE_FILE Move all or part of a file from one set of clusters to another within a volume.

FSCTL_GET_VOLUME_BITMAP - возвращает карту диска по занятым/незанятым кластерам без конкретики по файлам...
FSCTL_GET_RETRIEVAL_POINTERS - именно эту я использую для получения информации по отдельному открытому(!) файлу.
FSCTL_MOVE_FILE - непосредственно для дефрагментации...

PS. ведь O&O Defrag как-то показывает расположение того же свопа на диске... наверняка есть какие нибудь функции, а я не знаю куда копать

PPS. можно конечно попробовать вычислить из общей карты диска - вычитанием имеющихся расположений файлов, но, имхо, не то...


Игорь Шевченко   (2005-06-22 18:22:00) [26]


> Приветствую гуру, кто может подсказать как получить покластерное
> расположение заблокированного файла на диске, например pagefile.sys


Среди API дефрагментации ничего нету ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо