ВУЗ:
Составители:
WORD ID; // Идентификатор
};
struct FileNameAttrCont // Содержание атрибута имени
{
INT64 FileReference; // Файловая ссылка на директорию
BYTE Time[32]; // Время
INT64 ByteAllocate; // Распределено байт
INT64 RealSize; // Реальный размер
INT64 Flag; // флаг
BYTE LengthName; // Длина имени
BYTE TypeName; // Тип имени
char FileName[30]; // Имя
};
#pragma pack()
byte buf[512];
byte buf_FileRec[1024];
int main(int argc, char **argv)
{
HANDLE h;
// открываем логический диск
h = CreateFile("\\\\.\\C:", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
// Проверяем успешно ли закончилась попытка открытия логического диска
if (h != INVALID_HANDLE_VALUE)
{
DWORD dwBytesRead; DWORD dwBytesWrite; LONG BeginMFTSector;
// Читаем первый сектор раздела
ReadFile(h, buf, 512, &dwBytesRead, NULL);
// Извлекаем из считанного сектора блок параметров
BIOS
BPB_NTFS sbpbntfs;
memcpy(&sbpbntfs, buf + 11, 73);
// Определяем сектор начала MFT
BeginMFTSector = sbpbntfs.bSecPerClust * sbpbntfs.FirstMFT;
// Позиционируемся на начало MFT
DWORD dwPtrLow = SetFilePointer (h, 512*(BeginMFTSector+32), NULL, FILE_BEGIN);
// Читаем блок из MFT
ReadFile(h, buf_FileRec, 1024, &dwBytesRead, NULL);
// Извлекаем из считанного заголовок файловой записи
FileRecordHeader fHeader;
memcpy(&fHeader, buf_FileRec, sizeof(fHeader));
DWORD OffsetFileRec = 0;
while(strncmp(fHeader.ID, "FILE",4) == 0)
{
// Читаем из MFT файловую запись
ReadFile(h, buf_FileRec, 1024, &dwBytesRead, NULL);
Страницы
- « первая
- ‹ предыдущая
- …
- 18
- 19
- 20
- 21
- 22
- …
- следующая ›
- последняя »