Порядок работы с NTFS
В NTFS первым шагом должна стать обработка загрузочного сектора в первом секторе файловой системы, являющегося частью файла $Boot. Из загрузочного сектора берутся сведения о начальном адресе MFT и размере каждой записи MFT. На основании этих сведений обрабатывается первая запись MFT, связанная с файлом $MFT. Из этой записи берется информация о местонахождении других записей MFT.
Все записи имеют одинаковый размер, поэтому найти запись с нужным номером несложно. После успешного поиска записи в таблице можно переходить к обработке атрибутов. Обработка записи MFT начинается с заголовка, после чего ищется первый атрибут. Далее мы читаем заголовок атрибута, определяем его тип и соответствующим образом обрабатываем содержимое. Местонахождение второго атрибута определяется по длине первого атрибута. Процедура повторяется до тех пор, пока не будут обработаны все атрибуты. За последним атрибутом следует маркер Oxffffffff.
Пример упрощенного чтения нефрагментированной MFT
#include <Windows. h>
#include <stdio. h>
int main()
{
struct{
DWORD TypeID;
UINT Length;
char Resident;
char NameLength;
WORD NameOffset;
WORD Flags;
WORD ID;
DWORD SizeContent;
WORD OffsetContent;
}HeaderAttrib;
struct{
char ParentDir[8];
UINT64 TimeCreate;
UINT64 TimeModif;
UINT64 TimeChange;
UINT64 TimeAcces;
UINT64 Size;
UINT64 RealSize;
UINT Attr;
UINT res;
char NameLength;
char NameSpace;
char FileName[100];
}NameAttr;
char buf[1024];
DWORD dwByteRead;
LARGE_INTEGER BeginMFTSector;
HANDLE h = CreateFile("\\\\.\\D:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (h!= INVALID_HANDLE_VALUE)
{
ReadFile(h, buf, 512, &dwByteRead, NULL);//read BOOT
UINT64 s = *((long long *)(buf + 48));
//UINT64 BeginMFTSector
BeginMFTSector. QuadPart = buf[13] * s * 512;
while (1){//cicle MFT
DWORD dwLow = SetFilePointer(h, BeginMFTSector. LowPart, (PLONG)&BeginMFTSector. HighPart, FILE_BEGIN);
ReadFile(h, buf, 1024, &dwByteRead, NULL);//file record
if (strncmp(buf, "FILE",4)) break;
WORD AttrOffset=*(WORD *)(buf + 20);
while (1)//cicle attrib
{
memcpy(&HeaderAttrib, buf + AttrOffset, sizeof(HeaderAttrib));//header attr
if (HeaderAttrib. TypeID == 0xffffffff) break;//last attr
if (HeaderAttrib. TypeID == 0x30)//name attribut
{
WORD FileAttrOffset = AttrOffset + HeaderAttrib. OffsetContent;
memcpy(&NameAttr, buf + FileAttrOffset, sizeof(NameAttr));
if (NameAttr. NameLength > 0)
{
char Name[30]; int j = 0;
for (int i = 0; i < NameAttr. NameLength * 2; i += 2)
Name[j++] = NameAttr. FileName[i];
Name[j] = '\0';
printf("%s\n", Name);
}
}
AttrOffset += HeaderAttrib. Length;
}
BeginMFTSector. QuadPart += 1024;
}
}
system("pause");
return 0;
}
Варианты заданий к лабораторной работе №6
Вывести имена и основные характеристики атрибутов метафайла. (корневой каталог) Вывести имена и основные характеристики атрибутов метафайла $Bitmap Вывести имена и основные характеристики атрибутов метафайла $MFT Вывести имена и основные характеристики атрибутов метафайла $AttrDef Вывести имена и основные характеристики атрибутов метафайла $Volume Вывести имена и основные характеристики атрибутов метафайла $BadClus Вывести имена и основные характеристики атрибутов метафайла $LogFile Вывести имена и основные характеристики атрибутов метафайла $MFTMirr Вывести имена и основные характеристики атрибутов метафайла $Boot Вывести имена и основные характеристики атрибутов метафайла $Secure Вывести имена и основные характеристики атрибутов метафайла $UpCase Вывести имена и основные характеристики атрибутов метафайла $Extend Вывести имена и основные характеристики атрибутов метафайла $Quote Вывести состав корневой директории заданного диска Вывести имена файлов, содержащих нерезидентные атрибутыКонтрольные вопросы
Назначение MFT, определение ее местоположения. Структура записи таблицы MFT. Резидентные и нерезидентные атрибуты. Назначение метафайлов.Лабораторная работа № 7
Системный Реестр в WINDOWS NT.
Цель работы: изучить структуру системного Реестра и основные функции работы с системным Реестром.
Теоретические сведения
Системный Реестр в WINDOWS NT является иерархической структурой, состоящей из разделов(key) и пар параметров(name-value pair). Эта структура используется как база данных, централизованно хранящая информацию о пользователях, приложениях, операционной системе и о конфигурации компьютера. Разделы HKEY - это средства доступа к разделам Реестра самого верхнего уровня. Они определяются в API Реестра и являются точкой входа для разработчиков к остальному дереву Реестра. Пара «параметр - значение» состоит из трех частей: имени параметра, значения параметра и типа данных, т. е. типа значения. Основные три типа данных: двойное слово (DWORD - тип REG_DWORD), строка (STRING - тип REG_SZ) и двоичное значение (BINARY - тип REG_BINARY).
Некоторые действия, реализуемые изменением реестра:
- Узел HkLM\ SYSTEM\ CurrentControlSet\ Control…
Отключение коротких имен 8.3 в NTFS:
…\ FileSystem\NtfsDisable8dot3NameCreation :=1
Изменение установленных по умолчанию переменных окружения:
... \ SessionManager\ Environment
Очистка файла подкачки Pagefile. sys.
... \ SessionManager\ MemoryManagement\ ClearPageFileAtShutdown :=1
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 |


