В статье Ms-Rem'а описан способ работы c занятыми файлами с помощью прямого доступа к диску. Но чтобы получить карту кластеров на томе нужно сперва открыть файл передав его хэндл DeviceIoControl.. А открыть его нельзя т.к. он занят.. Или я что-то не так понял?
не файл, а диск: CreateFile("\\\\.\\PhysicalDriveX", ...) где, X - номер физического диска (zero-based)
Диск открывается для чтения кластеров, а для получения карты кластеров нужно открыть файл ... hFile = CreateFile(lpFileName, FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, 0); ...
.. hFile = CreateFile(lpFileName, FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, 0); ... if (DeviceIoControl(hFile, FSCTL_GET_RETRIEVAL_POINTERS, &InBuf, sizeof(InBuf), OutBuf, OutSize, &Bytes, NULL)) { http://wasm.ru/article.php?article=lockfileswork - метод прямого доступа к диску.
qvant Обрати внимание на второй параметр CreateFile - FILE_READ_ATTRIBUTES, т.е. доступ к данным файла не запрашивается, + смотри в конце описания метода "... Таким способом можно читать только файлы которые можно открыть с доступом FILE_READ_ATTRIBUTES ..."