Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 144
от 23.05.2005, 00:30

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 1


Вопрос № 20997: Уважаемые эксперты! Какие существуют функции для работы с кластерами под Windows (чтение-запись, пометить как плохой и т.д.)? Как определить, какие кластера занимает определённый файл? ...

Вопрос № 20997
Уважаемые эксперты! Какие существуют функции для работы
с кластерами под Windows (чтение-запись, пометить как плохой и т.д.)? Как определить, какие кластера занимает определённый файл?
Отправлен: 17.05.2005, 20:41
Вопрос задал: Александр А.А. (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: DSota
Здравствуйте, Александр А.А.!
Существует функция DeviceIoControl, у нее для каждого случая свои параметроы:
hDevice=CreateFile("\.PhysicalDrive0",...);
или hDevice=CreateFile("\.c:",...); - добавлять два слеша точку и слеш в начале обязательно!
Получить кластера файла:
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to volume
FSCTL_GET_RETRIEVAL_POINTERS, // dwIoControlCode
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
(LPVOID) lpOutBuffer, // output buffer
(DWORD) nOutBufferSize, // size of output buffer
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
typedef struct {
LARGE_INTEGER StartingVcn;//Номер кластера в файле
}STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
тип lpOutBuffer:
typedef struct RETRIEVAL_POINTERS_BUFFER{
DWORD ExtentCount;
LARGE_INTEGER StartingVcn;
struct{LARGE_INTEGER NextVcn; - кратко сказать это и есть кластеры
LARGE_INTEGER Lcn;}
Extents[1];
}RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
Получить карту свободных-занятых кластеров:
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to volume
FSCTL_GET_VOLUME_BITMAP, // dwIoControlCode
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
(LPVOID) lpOutBuffer, // output buffer
(DWORD) nOutBufferSize, // size of output buffer
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
Переместить файл:
BOOL DeviceIoControl(
(HANDLE) hDevice, // handle to volume
FSCTL_MOVE_FILE, // dwIoControlCode
(LPVOID) lpInBuffer, // input buffer
(DWORD) nInBufferSize, // size of input buffer
NULL, // lpOutBuffer
0, // nOutBufferSize
(LPDWORD) lpBytesReturned, // number of bytes returned
(LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
);
typedef struct{
HANDLE FileHandle;
LARGE_INTEGER StartingVcn;//Номер кластера в файле, который нужно сдвинуть
LARGE_INTEGER StartingLcn;//Кластер на диске, куда нужно сдвинуть
DWORD ClusterCount;//Количество кластеров для сдвига
} MOVE_FILE_DATA.
Ответ отправил: DSota (статус: Студент)
Отправлен: 18.05.2005, 10:24
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq

Другие рассылки этой тематики
Отписаться
Вспомнить пароль

В избранное