Hram
|
Posted: Wed Oct 31, 2007 23:13 Post subject: |
|
|
Я связался с разработчиком программы NSСopy и он любезно предоставил мне описание формата NSC файла, а потому у меня есть предложение может кто возмется написать плагин для просмотра NSC файлов?
Описание от автора:
Quote: | Это все для версии 1.03 и выше.
Вначале файла необходимо пропустить все байты, пока не встретится байт
с кодом 0x1A.
Сразу за ним следует InfoFile_Header, потом InfoFile_Data_v02.
struct InfoFile_Header
{
char_4 sequence;
uint_32 version;
};
sequence - 4 символа "NSCI"
version - про нее потом - ниже
struct InfoFile_Data_v02
{
uint_32 flags;
uint_64 filesize;
uint_32 fileattributes;
uint_64 filetime;
uint_32 sectorsize;
int_32 operation;
uint_64 position;
int_32 blockcount;
};
char_4 - 4 байта.
uint_32 - 32-разрядное целое беззнаковое число.
uint_64 - 64-разрядное целое беззнаковое число.
В основном интересуют следующие поля:
filesize - размер файла в байтах
sectorsize - размер сектора в байтах
blockcount - количество блоков
Далее следует массив из uint_64, размер массива = blockcount.
Каждый элемент массива - размер блока в секторах. Блоки следуют друг
за другом. Блок с четным номером - хороший, с нечетным - плохой.
Т.е.:
arr[0] - хороший
arr[1] - плохой
arr[2] - хороший
и т.д.
Следует обратить внимание, что размер блока именно в _секторах_, т.е.
размер в байтах самого первого хорошего блока = arr[0] * sectorsize
Несколько слов по поводу остальных полей:
flags - пока всегда равен 0
fileattributes - атрибуты файла в том виде, в каком их дает WinAPI
GetFileAttributes()
filetime - время модификации файла, в том виде, в котором его дает
WinAPI GetFileTime() (имеется ввиду lpLastWriteTime)
operation - текущая стадия копирования:
enum Operation
{
OFastCopy = 0,
ODetalize = 1,
ODetalizeMore = 2,
OBadCopy = 3
};
position - номер сектора текущей позиции копирования
Еще несколько слов про version. Версия NSCopy 1.02 и ниже имела другой
формат NSC файла, поэтому в идеале стоит смотреть что храниться в
version. Если его представить как массив из 4-х байт, то их смысл
будет такой:
INFOFILE_VERSION_MINOR
INFOFILE_VERSION_MAJOR
ENGINE_VERSION_MINOR
ENGINE_VERSION_MAJOR
Интересует только INFOFILE_VERSION_MAJOR, т.е. второй байт. Если он не
равен 2, значит формат NSC файла другой и не совместим с этим
форматом. Остальные байты по большому счету не важны. |
|
|